您好,登錄后才能下訂單哦!
python裝飾器的寫法有哪些?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
裝飾器的示例代碼
# 定義裝飾器 def decorator(func): def inner(): # 在內部函數里面對已有函數進行裝飾 print('已添加登錄認證') func() return inner def comment(): print('發表評論') # 調用裝飾器對已有函數進行裝飾,左邊的comment=inner comment = decorator(comment) # 調用方式不變 comment()
裝飾器的語法糖寫法
如果有多個函數都需要添加登錄驗證的功能,每次都需要編寫func = decorator(func)這樣代碼對已有函數進行裝飾,這種做法還是比較麻煩。
Python給提供了一個裝飾函數更加簡單的寫法,那就是語法糖,語法糖的書寫格式是: @裝飾器名字,通過語法糖的方式也可以完成對已有函數的裝飾。
# 定義裝飾器 def decorator(func): def inner(): # 在內部函數里面對已有函數進行裝飾 print('已添加登錄認證') func() return inner @decorator # comment = decorator(comment) 裝飾器語法糖對該代碼進行了封裝 左邊comment=inner def comment(): print('發表評論') # 調用方式不變 comment()
裝飾器的執行時機
當前模塊加載完成以后,裝飾器會立即執行,對已有函數進行裝飾。
# 定義裝飾器 def decorator(func): print('裝飾器執行了') def inner(): # 在內部函數里面對已有函數進行裝飾 print('已添加登錄認證') func() return inner @decorator # comment = decorator(comment) 裝飾器語法糖對該代碼進行了封裝 左邊comment=inner def comment(): print('發表評論')
運行結果
裝飾器執行了
1
裝飾器實現已有函數執行時間的統計
import time def decorator(func): def inner(): # 獲取時間距離1970-1-1 0:0:1的時間差 begin = time.time() func() end = time.time() result = end - begin print(f'函數執行完成耗時:{result}') return inner @decorator def work(): for i in range(10000): print(i) work()
裝飾帶有參數的函數
def decorator(func): def inner(num1, num2): print('正在努力執行加法計算') func(num1, num2) return inner @decorator def add_num(num1, num2): result = num1 + num2 print(f'結果為:{result}') add_num(1, 2)
裝飾帶有參數、返回值的函數
def decorator(func): def inner(num1, num2): print('正在努力執行加法計算') num = func(num1, num2) return num return inner @decorator def add_num(num1, num2): result = num1 + num2 return result result = add_num(1, 2) print(f'結果為:{result}')
類裝飾器的使用
class MyDecorator(object): def __init__(self, func): self.__func = func # 實現__call__方法,表示對象是一個可調用對象,可以像調用函數一樣進行調用 def __call__(self, *args, **kwargs): # 對已有函數進行封裝 print('馬上就有下班啦') self.__func() @MyDecorator # @MyDecorator => show = MyDecorator(show) def show(): print('快要下雪啦') # 執行show,就相當于執行MyDecorator類創建的實例對象,show() => 對象() show()
擴展:
函數之所以能夠調用,是因為函數內部實現了 __call__ 方法
感謝各位的閱讀!看完上述內容,你們對python裝飾器的寫法有哪些大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。