4-2日装饰器,带参数的装饰器
生活随笔
收集整理的這篇文章主要介紹了
4-2日装饰器,带参数的装饰器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 retreturn inner2,裝飾器的應用場景:比如插入日志,性能測試,事務處理,緩存等等場景。
def func1():"""此函數是什么功能,參數分別是什么作用。:return: 返回值是登錄成功與否(True,False)"""print(999)return Truefunc1() 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 retreturn innerreturn wrapperflag = 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') # 4return inner1def wrapper2(func): # func == inner1def inner2():print('wrapper2 ,before func') # 1 func()print('wrapper2 ,after func') # 5return inner2 # @wrapper3 @wrapper2 # f = wrapper2(f) 里面的f==inner1 外面的f == inner2 @wrapper1 # f = wrapper1(f) 里面的f==函數名f 外面的f == inner1 def f(): # 3print('in f')f() # inner2()?
Python語言函數代碼的執行流程,為了保證函數的定義先于其首次調用時執行,我們需要知道中語句的執行順序。
執行總是從程序的第一行代碼開始的,從上到下,從左到右,按順序依次執行第一條語句。
函數定義并不會改變程序的執行流程,但應該注意函數代碼塊中的語句并不是立即就執行的,而是等到函數被程序調用時才會執行。
函數調用可以看作程序執行流程中的一個迂回路徑,遇到函數調用時,并不會直接繼續執行下一條語句,而是跳到函數體的第一行,繼續執行完函數代碼塊的所有語句,再跳回到原來離開的地方。
看似比較簡單,一會你會發現,函數代碼塊中可以調用其他函數,當程序流程運行到一個函數之中時,可能需要執行其他函數中的語句。但當執行那個函數中的語句時,又可能再需要調用執行另一個函數的語句。
幸好Python對于它運行到哪里有很好的記錄,所以在每個函數執行結束之后,程序都能跳回到它離開的那個地方,直到執行到整個程序的結尾,才會結束程序。
當我們看別人的Python代碼的時候,并不總是應該一行行的按照書寫順序來閱讀,有時候,按照執行的流程來閱讀代碼,理解代碼的含義才會更好一些。
?
轉載于:https://www.cnblogs.com/yzxing/p/8692313.html
總結
以上是生活随笔為你收集整理的4-2日装饰器,带参数的装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 14 三大隐藏功能分享 | 如何
- 下一篇: 美国华尔街拥抱区块链是最大的威胁