尚學堂百戰程序員:Python之裝飾器
什麼是裝飾器?
裝飾器本質上是一個Python函數,它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數對象。它經常用於有切面需求的場景,比如:插入日誌、性能測試、事務處理、緩存、權限校驗等場景。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函數功能本身無關的雷同代碼並繼續重用。
裝飾器的形成過程
不修改函數的調用方式,但是還想在原來的函數前後添加功能
import time
#裝飾帶參數函數的裝飾器
def timer(f): # 計算函數的執行時間
def inner(*args,**kwargs):
start = time.time()
ret = f(*args,**kwargs) # 被裝飾的函數
end = time.time()
print(end - start)
return ret
return inner
@timer # 語法糖 @裝飾器函數名 等價於 func = timer(func)
def func(a,b): # 被裝飾的函數
print('大家好',a,b)
time.sleep(0.01)
return '你好'
ret = func(1,b=2) # 實際執行了inner()
print(ret)
timer就是一個裝飾器函數,只是對一個函數有一些裝飾作用。
“我們相信人人都可以成爲一個IT大神,現在開始,選擇一條陽光大道,助你入門,學習的路上不再迷茫。這裏是北京尚學堂,初學者轉行到IT行業的聚集地。"
查看原文 >>