一. 叠加多个装饰器
1. 加载顺序: (outter 函数的调用顺序): 自下而上
2. 执行顺序: (wrapper函数的调用顺序): 自上而下
def outter1(func1): func1= wrapper 2 的内存地址 print(' 加载了outter1') def wrapper1(* args, **kwargs): print(' 执行了wrapper1') res1=func1(* args, **kwargs) print(1111) return res1 return wrapper1 def outter2(func2): func2=wrapper3 的内存地址 print('加载了outter2') def warpper2(* args, **kwargs): print('执行了wrapper2') res2=func2(* args, **kwargs) print(2222) return res2 return wrapper2 def outter3(func3): #fun3=最原始的那个index内存地址 print('加载了outter2') def wrapper3(* args, **kwargs): print('执行了wrappr3') res3=func3(* args, **kwargs) print(3333) return res3 return wrapper3 @outter1 @outter2 @outter3 def index(): print('from index') index()
# 执行顺序: 从上到下
二. 三元表达式
def max2(x,y): if x>y: return x else: return y res=max2(10, 20) # 三元表达式 res=x if x>y else y print(res)
三. 列表生成式 & 字典生成式
L=[] for i in range(10): if i>4: L.append(i**2) L=[i**2 for i in range(10) if i >4] # 字典生成式 res={i:i**2 for i in range(10) if i>3} # 集合生成式 res={i for i in 'hello'}
四. 匿名函数: 只定义了一个函数的内存地址,主要用于临时一次的场景
lambda x,y: x+y # lambda 函数自带return值
res=(lambda x, y: x+y)(1,3) # 结果为4
salaries={ 'egon':3000, 'alex':100000000, 'wupeiqi':10000, 'yuanhao':2000 } # 求出薪资最高的人名 def func(k): return salaries[k] print(max(salaries,key=func)) max 底层for 循环 print(max(salaries, key=lambda k:salaries[k]) sorted 函数 底层for 循环 sorted(salaries,key=lambda k:salaries[k], reverse=True)