Python全棧學習筆記day 12:裝飾器進階
阿新 • • 發佈:2018-11-02
一、帶引數的裝飾器
一個裝飾器同時裝飾多個函式:
def timer_out(): def timer(func): def inner(*args,**kwargs): print('裝飾函式前') ret = func(*args,**kwargs) print('裝飾函式後') return ret return inner return timer @timer_out() def func1(): print('1111') @timer_out() def func2(): print('2222') func1() func2() #裝飾函式前 #1111 #裝飾函式後 #裝飾函式前 #2222 #裝飾函式後
假如你有成千上萬個函式使用了一個裝飾器,現在你想把這些裝飾器都取消掉,你要怎麼做?
一個一個的取消掉? 沒日沒夜忙活3天。。。
過兩天你領導想通了,再讓你加上。。。
改進版:
flog = False def timer_out(flog): def timer(func): def inner(*args,**kwargs): if flog: print('裝飾函式前') ret = func(*args,**kwargs) print('裝飾函式後') return ret else: ret = func(*args, **kwargs) return ret return inner return timer @timer_out(flog) def func1(): print('1111') @timer_out(flog) def func2(): print('2222') func1() func2() #1111 #2222
二、多個裝飾器裝飾一個函式
def wahaha1(func): def inner1(*args,**kwargs): print('1') ret = func(*args,**kwargs) print('1') return ret return inner1 def wahaha2(func): def inner2(*args,**kwargs): print('2') ret = func(*args,**kwargs) print('2') return ret return inner2 def wahaha3(func): def inner3(*args,**kwargs): print('3') ret = func(*args,**kwargs) print('3') return ret return inner3 @wahaha1 @wahaha2 @wahaha3 def f(): print('函式') f() # 1 # 2 # 3 # 函式 # 3 # 2 # 1
多個裝飾器裝飾一個函式的關係: