有參裝飾器 1,將@ 與函數分開@ timmerout(flag) 返回了timmer 2,將@timmer結合 PS:遇到問題沒人解答?需要Python學習資料?可以加點擊下方鏈接自行獲取 note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee3 ...
有參裝飾器
def timmerout(flag1): #flag1 =flag
def timmer(f):
def inner(*args,**kwargs):
if flag1:
start_time = time.time()
ret = f(*args,**kwargs)
end_time = time.time()
print('此函數的執行效率%s' % (end_time - start_time))
return ret
else:
ret = f(*args, **kwargs)
return ret
return inner
return timmer
flag = False
@timmerout(flag) #將@與timmerout(flag)分離,拿到後者的執行結果後在與@組合。
def func1():
time.sleep(0.3)
print('非常複雜......')
return 666
1,將@ 與函數分開@ timmerout(flag) 返回了timmer
2,將@timmer結合
PS:遇到問題沒人解答?需要Python學習資料?可以加點擊下方鏈接自行獲取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76
多個裝飾器裝飾一個函數
def wrapper1(func): # func = f函數名
def inner1():
print('wrapper1 ,before func') # 2
func() # f函數名()
print('wrapper1 ,after func') # 4
return inner1
def wrapper2(func): # func = inner1
def inner2():
print('wrapper2 ,before func') # 1
func() # inner1()
print('wrapper2 ,after func') # 5
return inner2
@wrapper2 # f = warpper2(f) 裡面的f是inner1 外面的f是inner2
@wrapper1 # f = warpper1(f) 裡面的f函數名 外面的f 是inner1
def f():
print('in f') # 3
f() # inner2()
# wrapper2 ,before func
# wrapper1 ,before func
# in f
# wrapper1 ,after func
# wrapper2 ,after func