疊加多個裝飾器,列表生成式,字典生成式,匿名函式
阿新 • • 發佈:2018-12-03
一. 疊加多個裝飾器
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 res1return 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)