装饰器: 在不改变原函数代码基础上,为原函数扩展功能
装饰器格式:
##装饰器的编写(函数的嵌套,外城函数返回内城函数):
def wrapper (funk):def inner (*args,**kwags):#自定义共能,根据功能在funk函数执行前后展现对应将其放在funk()前后pass(自定义功能)a = funk(*args,**kwargs) #调用被装饰的函数return areturn inner
##装饰器的使用:
@wrapper #@外层函数
def index(*args,**kwargs):pass
index()
@wrapper:1.执行wrapper函数以index函数为参数(即func指向index):wrapper(index)
2.执行完外城函数后将内城函数返回,赋值给index变量,此时index不在指向原先指向的函数,而是指向内层函数
推导式:
列表推导式: v = [for循环中的变量 for循环一个可迭代对象] 中间没有用逗号隔开 eg:v = [i for i in range(10)]
v = [for循环中的变量 for循环一个可迭代对象 if条件] if条件满足加到列表中 eg: v = [i for i in range(10) if i>10]
面试题1:
v = [lambda x:x*i for i in range(10)]
v[0](2)
print(v) #v列表里面放着10个匿名函数,没有被执行且i循环完后为9
print(v[0](2)) #执行匿名函数且参数x = 2 >>>18面试题2:
def num():return [lambda x:x*i for i in range(4)]
v = [m(2) for m in num()] #调用num得到含有匿名函数的列表且i=3,for循环此列表,m(2)作为列表v的元素
print(v)>>>[6, 6, 6, 6]
集合推导式: v = {for循环中的变量 for循环一个可迭代对象} 得到一个集合
列表推导式: v = {"k" + str(i) : i for i in range(10)}
#注意集合,字典中不是所有数据类型都能作其元素