4-2日裝飾器,帶參數的裝飾器
阿新 • • 發佈:2018-04-02
tar 相關操作 rom 裝飾器 有用 緩存 false war cto
1,函數的有用信息
from functools import wraps#引用模塊 def wrapper(f): # f = func1 @wraps(f) def inner(*args,**kwargs): #聚合 #args (1,2,3) ‘‘‘執行函數之前的相關操作‘‘‘ ret = f(*args,**kwargs) # 打散 1,2,3 ‘‘‘執行函數之後的相關操作‘‘‘ return ret return inner
2,裝飾器的應用場景:比如插入日誌,性能測試,事務處理,緩存等等場景。
def func1(): """ 此函數是什麽功能,參數分別是什麽作用。 :return: 返回值是登錄成功與否(True,False) """ print(999) return True func1() print(func1.__name__) print(func1.__doc__)
def func1(): """ 此函數是完成什麽的功能,參數分別是。。。作用。 :return: 返回值是登錄成功與否(True,False) """ print(666) print(func1.__name__) print(func1.__doc__) return True func1()
3,裝飾器帶多個參數
import time def timmer(*args,**kwargs): def wrapper(f): def inner(*args,**kwargs): if flag: start_time = time.time() ret = f(*args,**kwargs) time.sleep(0.3) end_time= time.time() print(‘此函數的執行效率%f‘ % (end_time-start_time)) else: ret = f(*args, **kwargs) return ret return inner return wrapper flag = True @timmer(flag,2,3) # 兩步:1,timmer(flag) --> wrapper 2,@wrapper 裝飾器 def func1(): print(666) @timmer(flag) def func2(): print(777) func1() func2()
4,多個裝飾器裝飾一個參數
def wrapper1(func): # func == f函數名 def inner1(): print(‘wrapper1 ,before func‘) # 2 func() print(‘wrapper1 ,after func‘) # 4 return inner1 def wrapper2(func): # func == inner1 def inner2(): print(‘wrapper2 ,before func‘) # 1 func() print(‘wrapper2 ,after func‘) # 5 return inner2 # @wrapper3 @wrapper2 # f = wrapper2(f) 裏面的f==inner1 外面的f == inner2 @wrapper1 # f = wrapper1(f) 裏面的f==函數名f 外面的f == inner1 def f(): # 3 print(‘in f‘) f() # inner2()
4-2日裝飾器,帶參數的裝飾器