當前位置:
首頁 > 最新 > Python成長日記-初識裝飾器

Python成長日記-初識裝飾器

裝飾器本質上是一個Python函數,它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數對象。

它常用於有切面需求的場景,比如:插入日誌、性能測試、事務處理、緩存、許可權校驗等場景。

裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函數功能本身無關的雷同代碼並繼續重用。

概括的講,裝飾器的作用就是為已經存在的對象添加額外的功能。

首先我們看一個簡單的例子:

我們實現了一個簡單的函數:

若此時,我們有了一個新的需求:列印hello並且列印日誌

那麼可能大家都會想到,我添加一行列印日誌的代碼不就行了嗎?

不難發現,我們可以實現

假如你有幾十個函數都需要添加日誌,那麼你就必須把每個日誌都找到,然後一行一行地添加代碼,這樣就會造成大量的重複代碼,我們會不會在不動原函數的前提下實現我們的功能?

開放封閉原則:

對擴展開放,意味著有新的需求或變化時,可以對現有代碼進行擴展,以適應新的情況。

對修改封閉,意味著類一旦設計完成,就可以獨立完成其工作,而不要對類進行任何修改。

這時可能有人想到了,我再創建個函數然後調用這個函數就可以實現,而且減少了代碼重複

相當於我們之前是使用info()函數實現列印,現在又要使用logger()函數實現,若是別人不知道logger這個函數,只知道有info這個函數,他只想調用info這個函數

dangdangdang~~裝飾器就要登場了

其實,python為我們提供了一個更簡單的方式,使用(@裝飾器函數)即可

但是裝飾器函數必須寫在你要使用的函數之前,否則就找不到你的裝飾器函數

擴展:若我們的函數是個帶參函數且有返回值,那麼我們裝飾器部分的形參可以使用*args和**kwargs


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

TAG:Python |