python面试题
装饰器
python基于闭包实现的语法糖,也是通常所说的面向切片编程,可以在不改变原程序的情况下改变/添加程序的行为或方法
缺点:
- 会改变原程序的属性,可以用functools.wraps解决
- 作用域变量不会及时清理,但因为这个特性也可以用于一些特殊场景,如:计数、频率限制等
with底层实现
__enter__
与 __exit__
方法
yield和yield from
yield相当于return,本质返回一个生成器
yield form相当于嵌套生成器,变成了一个迭代器
cc = [1,2,3]
def func(cc):
yield from cc
for val in func(cc):
print(val)
实现对list中dict进行去重
核心思路:dict不能用set,就转化为可以用set的方式
dict转字符串,set再转回来,json dumps不行可以用pickle进行序列化
Python的mixin
实际上是多个父类继承,获得多个父类的方法或属性