100个Python基础知识点——更新中

python

1.  range(10)在python2和python3中区别是什么?

a = range(10)在python2中是一个列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],占用一定的内存空间;

a = range(10)在python3中返回的是一个可迭代的对象,而不是一个列表,不会占用内存空间,可使用list函数返回列表,list(a);

2.   什么样的语言能够使用装饰器?

能够将函数当作参数进行传递的语言,就能使用装饰器。

3.  python内建数据类型有哪些?

python中有6个标准的数据类型:Number(数字)、String(字符串)、Tuple(元组)、List(列表)、Dictionary(字典)、Set(集合)

其中不可变数据类型:数字、字符串、元组;可变数据类型:列表、字典、集合

Number(数字):int(长整型)、float(浮点型)、bool(布尔型)、complex(复数)

4.  简述面向对象中__new__和__init__区别

调用的时间不同:

当类被调用创建实例的时候,先自动调用__new__方法创建实例,然后自动调用__init__方法初始化该实例

调用的方法不同:

__new__是由object基类提供的内置静态方法,必须传递参数cls,表示是以当前类创建的实例对象;__init__是实例方法,需

要传递参数self,接收实例初始化参数

实现的功能不同:

__new__在内存中为对象分配空间,并返回对象的引用;__init__接受对象的引用,并初始化实例属性

5.  简述with方法打开处理文件帮我们做了什么?

with open("./index.html", "r") as f:

content = f.read()

with 方法保证在打开文件的前提下,无论文件的读写过程是否出现错误,最终都会调用close方法,避免 文件描述符 被占用,浪费

系统资源;如果我们不使用with方法,就需要使用try方法来避免错误

f = open("./index.html", "r")

try:

  f.read()

except Exception as ret:

  return "The error is %s " % ret

finally:

  f.close()

6.  列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]

a = [1, 2, 3, 4, 5]
b = list(map(lambda x: x ** 2, a))
print(a)
print(b)
c = [x for x in b if x > 10]
print(list(c))

注:在python3中验证,输出结果如上图所示。

7.  python中生成随机整数、随机小数、0--1之间小数方法

import random
import numpy

# 生成随机整数,包括1, 不包括10

a = random.randint(1, 10)

# 生成随机小数,落在区间(0, 1), 不传参数,包括0, 不包括1

b = random.random()

# 使用numpy模块生成包含5个随机小数的列表
c = numpy.random.randn(5)  # [ 1.15177985  1.16256946 -0.6698583  -1.06471705  2.21637782]

 8.  如何表示原始字符串?

在字符串的前面加上字母r,例如:r"\n",表示的就是反斜杠和字母n的组合。

9.  解释一下正则表达式里面的贪婪和非贪婪 

Q:什么是贪心和非贪心匹配?

A:就是在匹配的过程中有歧义的时候,贪心就是匹配的多,非贪心就是匹配的少呗;

  python默认是贪心的匹配

import re

# 默认的贪心匹配

ret = re.search(r'(ha){3,5}', "hahahahahaha")

content = ret.group()

print(content) # 输出:"hahahahaha"

# 非贪心匹配

ret = re.search(r'(ha){3,5}?', "hahahahahaha")

content = ret.group()

print(content) # 输出:"hahaha"

10.  <div class="nam">中国</div>,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的

import re

str1 = """<div class="nam">中国</div>"""

ret = re.findall(r'<div class=".*">(.*?)</div>', str1) # ?表示的是非贪婪模式

print(ret)

# 输出:["中国"]

11.  python中断言方法举例 

12.  数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句

select  distinct  name  from  student

13.  列举linux中常用的15个命令

ls pwd where  ps mv rm cp cat tree cd mkdir touch more grep echo

14.  python2和python3的区别,列举5个

1. python2中print不用带括号,python3中需要带括号

2. python2中range返回的是列表,python3中返回的是可迭代的对象

3.  

15.  列举python中可变数据类型和不可变得数据类型,并简述原理

可变数据类型:list、dict、str

变量的值发生改变时,如进行append 、del等操作,其在内存中的地址是不会发生改变的,即虽然值发生变化,但是却还是同一个对象

不可变数据类型:number、tuple、set

变量的值发生改变时,相当于新建了一个对象,变量重新指向新的引用,即值发生改变时就会新建对象

16.  s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl" 

s = "ajldjlajfdljfddd"

s_set = set(s) # 输出:{'f', 'a', 'l', 'd', 'j'}

s_list = list(s_set) # 输出:['f', 'a', 'l', 'd', 'j']

s_list.sort() # 输出:['a', 'd', 'f', 'j', 'l']

s1 = ''.join(s_list)

print(s1) # 输出:adfjl

17.  说明列表的sort方法和内置函数sorted()的区别

list.sort():是列表list对象的方法,对列表本身进行排序,无返回值。

a = [("lisi", 4), ("wanger", 2), ("zhangsan", 3), ("wangwu", 5)]

a.sort(key=lambda x:x[1], reverse = True )

print(a)

# 输出:[('wangwu', 5), ('lisi', 4), ('zhangsan', 3), ('wanger', 2)]

sorted(iterable, key, reverse):是对 iterable 可迭代对象进行的排序;key 是可迭代对象中的元素,并按照该元素进行排序;reverse默认

             为False;返回一个新的列表。

a = [("lisi", 4), ("wanger", 2), ("zhangsan", 3), ("wangwu", 5)]

b = sorted(a, key=lambda x:x[1], reverse=False)

print(a)

print(b)

# 输出:

[('lisi', 4), ('wanger', 2), ('zhangsan', 3), ('wangwu', 5)]

[('wanger', 2), ('zhangsan', 3), ('lisi', 4), ('wangwu', 5)]

18.    利用collections库的Counter方法统计字符串每个单词出现的次数

from collections import Counter

c = Counter()

check_str = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"

for i in check_str:

c[i] += 1

print(c)

# 输出:

Counter({'l': 9, ';': 6, 'h': 6, 'f': 5, 'a': 4, 'j': 3, 'd': 3, 's': 2, 'k': 1, 'g': 1, 'b': 1})

19.  字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三  深圳"

import re

a = "not 404 found 张三 99 深圳"

b = []

print(a.split())

for i in a.split():

ret = re.search(r'[^a-zA-Z0-9]*', i)

if ret.group(): # 判断re.group()是否为None

b.append(ret.group())

print(" ".join(b))

# 输出:
"张三 深圳"

 20.  filter方法求出列表所有奇数并构造新列表,a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

filter(function, seq)函数是python中内建函数,filter函数会将function函数作用于序列seq,根据返回的

值是True还是False来判断是否保留,实现了对序列seq的筛选

from collections import Iterator

def is_odd(n):

return n % 2 == 1

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

b = filter(is_odd, a)

print(isinstance(b, Iterator)) # b 是一个迭代器,所以需要使用list()将其迭代生成

print(list(b))

# 输出:

True

[1, 3, 5, 7, 9]

21.  列表推导式求列表所有奇数并构造新列表,a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

b = [x for x in a if x % 2 == 1]

print(b)

22.  正则re.complie作用

compile:编译、编辑

re.compile生成一个Regex对象,即正则表达式对象,该对象可以用来匹配文本,用它匹配的速度快,并可重复使用

23.  两个列表[1,5,7,9]和[2,2,6,8]合并

a = [1,5,7,9]

b = [2,2,6,8]

# a.append(b)

# print(a) # 输出:[1, 5, 7, 9, [2, 2, 6, 8]], 注意append是将b整体添加到列表中

a.extend(b)

print(a)

# 输出:

[1, 5, 7, 9, 2, 2, 6, 8]

24.  用python删除文件和用linux命令删除文件方法

python:os.remove(文件名)

linux:       rm  文件名

25.   log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳 “2018-04-01 11:38:54”

from datetime import datetime

t = datetime.now()

t_str = t.strftime("%Y-%m-%d %H:%M:%S") # 将datetime类型转换为字符串

print(t_str)

t1_str = "2015-6-1 18:19:59"

t1 = datetime.strptime(t1_str, "%Y-%m-%d %H:%M:%S") # 将字符串转换为datetime类型

print(t1)

# 输出:

2018-12-03 10:52:45

2015-06-01 18:19:59

 26.  正则表达式匹配中,(.*)和(.*?)匹配区别?

?问号在python中有两个作用:可选模式、非贪婪匹配

(.*):贪婪模式匹配

(.*?):非贪婪模式匹配

import re

s = "<a>帅哥</a><a>美女</a>"

ret1 = re.findall("<a>(.*)</a>") # python默认的是贪婪模式

print(ret1) # 输出:帅哥</a><a>美女

ret2 = re.findall("<a>(.*?)</a>")

print(ret2) # 输出:["帅哥", "美女"]

27.  简述Django的orm

28.  [[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

p = [x for i in [[1,2],[3,4],[5,6]] for x in i]

print(p)

# 输出:[1, 2, 3, 4, 5, 6]

 (原来解决方法如此简单。。。)

29.  x="abc",y="def",z=["d","e","f"],分别求出x.join(y)和x.join(z)返回的结果

x = "abc"

y = "def"

z = ["d", "e", "f"]

print(x.join(y)) # 输出:dabceabcf

print(x.join(z)) # 输出:dabceabcf

30.  os.path.join()是如何工作的呢?

31.  举例说明异常模块中try except else finally的相关意义

try:

a = 100/0

except Exception as ret:

print("The Error is %s" % ret)

else:

print("没有发生异常情况。")

finally:

print("总会打印这句话")

# 输出:

The Error is division by zero

总会打印这句话

try:

a = 100/1

except Exception as ret:

print("The Error is %s" % ret)

else:

print("没有发生异常情况。")

finally:

print("总会打印这句话")

# 输出:

没有发生异常情况。

总会打印这句话

32.  举例说明zip()函数的用法

  1. 为什么函数名称是zip?

  zip的本意是 "压缩",而zip()函数返回的是一个迭代器,有压缩的意思,所以就叫这个名字喽。。。

  2. zip(*iterable)函数的用法说明

  参数:是一个或者多个可迭代对象;

  过程:取每个迭代对象相同位置的元素,组成一个元组;

  返回:返回一个迭代器对象;

  注意:1. 当可迭代对象的长度不一时,最短的对象耗尽时,迭代器就停止了。

     2. 返回的可迭代对象,进行一次遍历之后,再次遍历将取出空值。

from collections import Iterator

x = [1, 2, 3]

y = [4, 5, 6, 7]

zipped = zip(x, y)

print(zipped) # 输出:<zip object at 0x000000DB16FE55C8>

print(isinstance(zipped, Iterator)) # 输出:True

print([a for a in zipped]) # 输出:[(1, 4), (2, 5), (3, 6)]

print([i for i in zipped]) # 输出:[]

 33.  re.sub的用法举例

import re

a = "小明 98分"

ret = re.sub(r'\d+', '100', a)

print(ret) # 输出:'小明 100分'

34.  写出5条常用的SQL语句

create datebase 数据库名 charset=utf8;

create table 表名;

select * from 表名;

insert into 表名 (字段1、字段2...) values(字段所对应的值),(字段所对应的值)...  ——这是插入多条记录的方式

des 表名

35.  简述函数式编程

函数式编程是一种抽象程度很高的编程范式,其中,函数是基本单位。纯粹的函数式编程语言编写的函数没有变量,函数接受其他函数作为参数传入,因此,任意一个函数只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。允许使用变量的编程语言,由于函数内部的变量状态不确定,同样的输入,得到的输出可能不同,因此这种函数是有副作用的。python支持函数式编程,但是由于可以使用变量,因此,python不是纯粹的函数式编程语言。

36.  列举python中的高阶函数

  map(function, iterable,...):它是匹配函数,将function函数应用到iterable上,并返回一个map对象

  reduce():它是

  filter():它是过滤函数,和map()类似,接受一个函数和序列,并把函数应用到序列的每个元素上,根据函数返回的是True还是False来决定元素的去留

  sorted():它是排序函数

  

37.  假设python中没有提供map()函数,请自行编写一个my_map()函数实现与map()函数相同的功能。

def my_map(f, seq):

list_map = []

for i in seq:

list_map.append(f(i))

return list_map

def f(x):

return x**2

print(my_map(f, [1, 2, 3, 4, 5, 6])) # 输出:[1, 4, 9, 16, 25, 36]

 38.  列举一些提高python运行效率的方法

1. 使用生成器,可以节约大量的内存空间

2. 避免代码的重复使用

3. 多线程,多进程,协程

4. 多个if,elif的判断可以将最有可能的情况放在最前面,可以减少判断的次数,提高效率 

39.   简述mysql和redis区别

40.  遇到bug如何处理

41.  说明python中内建函数sorted()和列表的sort()方法的区别

首先,函数sorted()有返回值,列表的sort()方法没有返回值(它是在原址上进行的排序)

a = [2, 3, 6, 1, 8, 3, 0]

print(id(a)) # 输出:631868016776

print(a.sort()) # 输出:None 因为在原址上进行的拍寻,所以没有返回值, 并且 A = a.sort()的写法是错误的

a.sort()

print(a) # 输出:[0, 1, 2, 3, 3, 6, 8]

print(id(a)) # 输出:631868016776

b = [2, 3, 6, 1, 8, 3, 0]

print(id(b)) # 输出:231033566664

B = sorted(b)
print(b) # 输出:[2, 3, 6, 1, 8, 3, 0] 说明原来的列表不会发生改变

print(B) # 输出:[0, 1, 2, 3, 3, 6, 8]

print(id(B)) # 输出:231034765640

 其次,函数sorted(iterable, key, reverse)和列表方法sort(self, key, reverse),都有可选参数key和reverse。其中key用来接收函数,reverse的值为True或则False

a = [-2, 3, 6, 1, -8, 3, 0]

a.sort(key=abs, reverse=False)

print(a) # 输出:[0, 1, -2, 3, 3, 6, -8]

b = [-2, 3, 6, 1, -8, 3, 0]

B = sorted(b, key=abs, reverse=True)

print(B) # 输出:[-8, 6, 3, 3, -2, 1, 0]

 42.  a = [2,3,5,4,-9,6],从小到大排序,不许用sort,输出[-9, 2, 3, 4, 5, 6]

list1 = [2, 3, 5, 4, -9, 6]

new_list1 = list()

def get_min(list):

a = min(list)

list.remove(a)

new_list1.append(a)

if len(list) > 0:

get_min(list)

return new_list1

# 输出:[-9, 2, 3, 4, 5, 6]

43.  使用python写出一个单例模式

单例:单个实例,即无论调用类多少次只会创建一个实例对象,实例对象是唯一的。

class Student(object):

# 使用类属性来记录单例的引用

singleton_flag = None

   # 重写__new__方法

def __new__(cls, *args, **kwargs):

if cls.singleton_flag is None:

cls.singleton_flag = super().__new__(cls)

return cls.singleton_flag

a = Student()

print(a)

b = Student()

print(b)

# 输出:

<__main__.Student object at 0x000000B863FD8080>

<__main__.Student object at 0x000000B863FD8080>

 44.  列出常见的状态码和意义

200 OK 

请求正常处理完毕

204 No Content 

请求成功处理,没有实体的主体返回

206 Partial Content 

GET范围请求已成功处理

301 Moved Permanently 

永久重定向,资源已永久分配新URI

302 Found 

临时重定向,资源已临时分配新URI

303 See Other 

临时重定向,期望使用GET定向获取

304 Not Modified 

发送的附带条件请求未满足

307 Temporary Redirect 

临时重定向,POST不会变成GET

400 Bad Request 

请求报文语法错误或参数错误

401 Unauthorized 

需要通过HTTP认证,或认证失败

403 Forbidden 

请求资源被拒绝

404 Not Found 

无法找到请求资源(服务器无理由拒绝)

500 Internal Server Error 

服务器故障或Web应用故障

503 Service Unavailable 

服务器超负载或停机维护

 45.  说明一下python中 %s 和 %r 用法上区别

%s和%r对应的调用函数不同:

%s -> str()

%r -> repr()

函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式。repr()函数得到的字符串通常可以用来重新获得该对象,repr()的输入对python比较友好。通常情况下obj==eval(repr(obj))这个等式是成立的。

a = "Hello World"

b = str(a)

print(a) # 输出:Hello World

print(b) # 输出:Hello World

c = repr(a)

print(c) # 输出:'Hello World' 带有''号

print(a == eval(c)) # 输出:True

print(a == eval(b)) # 报错。。。

 46.  分别从前端、后端、数据库阐述web项目的性能优化

  前端:使用雪碧图(精灵图)—— 将网页中使用的多个 装饰类小图 合并成一张图片,这张图从服务器中下载出来,当再次使用的时候就可以直接从缓存中读取了,这样就可以减少网页加载时http请求(http请求在网页性能中是宝贵的资源)的数量,优化网页性能。

47.  使用pop和del删除字典中的"name"字段,dic={"name":"zs","age":18}

48.  列出常见MYSQL数据存储引擎

  InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。 

  MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。

  MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

 49.  简述同源策略

  什么是同源策略?

  同源策略:协议,域名,端口都相同;只要其中之一不相同,就是跨域。

50.  简述cookie和session的区别

  什么是cookie?

51.  简述线程、进程、协程

52.  IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分别代表什么异常

IOError:输入输出异常,IO操作方面的问题

AttributeError:属性异常,访问的对象不包含这个属性

ImportError:导入异常,导入模块或者包的时候路径问题

IndentationError:缩进异常,代码的缩进格式错误,python中缩进也是语法的一部分

KeyError:键异常,字典中不存在这个键

SyntaxError:语法错误

NameError:变量名异常,变量未定义

53.  交换变量a和b的值的方法

a = 666

b = 888

# 方法一

c = a

a = b

b = c

# 方法二

a = a + b

b = a - b

a = a - b

# 方法三(python独有的方法)

a, b = b, a

 54.  在函数中使用 += 来操作列表参数,那么是否会改变列表原本的值呢?

def demo(list1):

print("函数开始。。。")

list1 += list1

print(list1)

print("函数结束。。。")

gl_list = [1, 2, 3]

demo(gl_list)

print(gl_list)

# 输出结果为:

函数开始。。。

[1, 2, 3, 1, 2, 3]

函数结束。。。

[1, 2, 3, 1, 2, 3]

从结果来看,改变了函数中使用 += 操作列表,是会改变列表原有的值的;因为使用 += 来操作列表,本质上是使用列表的extend方法 

  

以上是 100个Python基础知识点——更新中 的全部内容, 来源链接: utcz.com/z/386894.html

回到顶部