什麼是裝飾器?

裝飾器本質上是一個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行業的聚集地。"

查看原文 >>
相關文章