10-5裝飾器進階_帶參數的裝飾器、多個裝飾器裝飾同一個函數
阿新 • • 發佈:2018-10-05
image star 結果 一個 -- sta highlight 是否 bsp
帶參數的裝飾器
只用在裝飾器最外層嵌套一個即可,以達到輕易控制裝飾器函數是否執行的作用
import time flag = False def timmer_outer(flag): def timmer(func): def innner(*args,**kwargs): if flag: start = time.time() ret = func(*args,**kwargs) end = time.time() print(end-start) return ret else: ret = func(*args, **kwargs) return ret return innner return timmer #執行步驟:兩步(timmer_outer(flag)執行後返回timmer,再執行@tmmer) @timmer_outer(flag) def func1(): time.sleep(0.1) print("函數1") @timmer_outer(flag) def func2(): time.sleep(0.1) print("函數2") func1() func2()
多個裝飾器裝飾同一個函數
def wrapper1(func):#func-->f def inner1(): print("wrapper1,before f") ret = func() func() #f() print("wrapper1,after f ") return ret return inner1 def wrapper2(func): def inner2(): print("wrapper2,before f") ret = func() func() #inner1() print("wrapper2,after f ") return ret return inner2 #f=wrapper2(f) = f=wrapper2(inner1) = inner2 @wrapper2 # f=wrapper1(f) = inner1 @wrapper1 def f(): print("in f") return ‘娃哈哈‘ print(f())
結果:
wrapper2,before f
wrapper1,before f
in f
wrapper1,after f
wrapper2,after f
娃哈哈
10-5裝飾器進階_帶參數的裝飾器、多個裝飾器裝飾同一個函數