講 Python 裝飾器前,我想先舉個例子,雖有點污,但跟裝飾器這個話題很貼切。 談裝飾器前,還要先要明白一件事,Python 中的函數和 Java、C++不太一樣,Python 中的函數可以像普通變數一樣當做參數傳遞給另外一個函數,例如: 先來看一個簡單例子,雖然實際代碼可能比這複雜很多: 說到這 ...
講 Python 裝飾器前,我想先舉個例子,雖有點污,但跟裝飾器這個話題很貼切。
談裝飾器前,還要先要明白一件事,Python 中的函數和 Java、C++不太一樣,Python 中的函數可以像普通變數一樣當做參數傳遞給另外一個函數,例如:
先來看一個簡單例子,雖然實際代碼可能比這複雜很多:
說到這裡。順便提醒下大家不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你缺新項目練習或者沒有python精講教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,裡面很多新教程項目,還可以跟老司機交流討教!
現在有一個新的需求,希望可以記錄下函數的執行日誌,於是在代碼中添加日誌代碼:
簡單裝飾器
@ 語法糖
*args、**kwargs可能有人問,如果我的業務邏輯函數 foo 需要參數怎麼辦?比如:
我們可以在定義 wrapper 函數的時候指定參數:
比如:
這時,你就可以把 wrapper 函數指定關鍵字函數:
帶參數的裝飾器
@use_logging(level="warn")等價於@decorator類裝飾器
functools.wraps
例子:
裝飾器順序一個函數還可以同時定義多個裝飾器,比如:
總結:不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你缺新項目練習或者沒有python精講教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,裡面很多新教程項目,還可以跟老司機交流討教!
本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。