python面试题重点基础篇
第一部分 必答题
1
编译型和解释型编译型编程语言需要先编译在执行如不修改下次执行不需要在编译修改后需要重新在编译一次只有全部编译完成后才会发现报错,解释型语言是逐条编译遇到错误立刻停止执行但是每次执行都需要从新编译一次
2
python2 print("1","2")会当作元组金进行输出
python2使用的是asscii 而python使用的是utf-8编码
python2的true和false不是两个关键字不能代表逻辑运算符
pyhton2类不是继承object
3
4
v1 = 一个列表
v2 = 一个列表和v1一样
v3 = 列表里面放元组
5
a,b = b,a
6
双引号单引号效果一样 但三引号是按格式输出会保留格式
7
==比较的是值
is对比的是地址
8
a = [1,2,3]
a = tuple(a)
a = list(a)
9
name[::-1]
10
a & b 交集
a | b 并集
a - b 差集
11
y 在 x - (x-y)
12
copy.copy(a)
13
赋值就是将两个变量指向同一个内存地址
浅拷贝是拷贝一个相同且地址不同的容器但里面的容器地址使用的是被拷贝容器内部容器的内存地址
深拷贝里面数据全相同地址全不同
14
pass是占位用的
15
[1,2,4,5,['b','c','d'],5]
[1,2,4,5,['b','c','d']]
[1,2,4,5,['b','c']]
16
>>> for i in range(1,10):
... for y in range(1,10):
... print(str(i)+"*"+str(y)+"="+str(i*y)+'\t')
17
a, b = 0, 1
while b < 100:
print (b, end = " ")
a, b = b, a + b
18
set()
19
with open('etl_log.txt', encoding = 'utf-8') as f:
for i in f:
print(i.strip())
20
字典
21
匿名函数
22
*args 和 **kwargs在函数定义阶段形参的位置代表聚合,接收任意参数,在函数体内代表打散
23
global
24
filter:过滤
map:映射
reduce:累加
25
名为lambda的函数就是匿名函数,方便
26
官方说明最大深度1000,实际测试997/998
27
迭代器:具有__iter__()和__next__()方法的对象称为迭代器
可迭代对象:具有__next__()方法的对象称为可迭代对象官方说明最大深度1000,实际测试997/998
28
生成器:生成器就是程序员自己写的迭代器
29
装饰器:在不改变原函数的代码及其调方式的情况下,为其添加新的功能,为装饰器
30
反射:使用字符串来操作对象的属性和方法
31
def warpper(f):
def inner(*args, **kwargs):
print('1')
ret = f(*args, **kwargs)
print('2')
return ret
return inner
@warpper
def func():
print('a')
func()
32
def auth(argv):
def warpper(f):
def inner(*args, **kwargs):
if argv:
print('1')
else:
print('2')
ret = f(*args, **kwargs)
return ret
return inner
return warpper
@auth(True)
def func():
print('a')
func()
33
def num():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])
“”"
def出现的位置是函数的定义处
函数() 出现的位置是函数的调用处
(1)调用的时候,才会把函数中的代码,从上到下执行一遍,否则不执行
(2)里面的func是一个闭包函数,延长了当前变量i的生命周期,最后一次i的值3,所以再去调用时候拿的3
“”"
def num():
lst = []
for i in range(4):
def func(x):
return i*x
lst.append(func)
return lst
lst = num()
print(lst)
lst = [ m(2) for m in num() ]
lst = [ m(2) for m in lst ]
lst = [ i*x for m in lst ]
lst = [3 * 2 for m in lst]
lst = [6,6,6,6]
“”"
[
<function func at 0x000001A02CA642F0>,
<function func at 0x000001A02CA64378>,
<function func at 0x000001A02CA646A8>,
<function func at 0x000001A02CA64730>
]
def func():
print(1)
for i in range(3):
print(i)
“”"
34
b身上的默认值是列表,如果使用原来默认的参数,调用func函数
会把几次调用的值都存放在同一个默认列表里
“”"
默认参数:
如果调用时,用户给实参了,那么使用用户的
如果调用时,用户没给实参,那么使用默认的(早已存在内存中的这个列表)
默认值会提前在内存中驻留,在使用时,才能调取,在定义函数的时候就提前开辟了空间
“”"
35
def func(a,b=[]):
b.append(a)
return b
v1 = func(1)
v2 = func(2,[10,20])
v3 = func(3)
print(v1,v2,v3) # [1,3] [10, 20, 2] [1, 3]
36
def func(a,b=[]):
b.append(a)
return b
v1 = func(1)
print(v1) # [1]
v2 = func(2,[10,20])
print(v2) # [10, 20, 2]
v3 = func(3)
print(v3) # [1, 3]
37
ip = “10.3.9.12”
strvar = “”
for i in ip.split("."):
bin_str = str(bin(int(i)))[2:]
# 总长度是8 原字符串居右
strvar += bin_str.rjust(8,“0”)
print(strvar)