閱讀142 返回首頁    go Python


Python裝飾器是精通Python的第一道關卡!看大牛是怎麼理解它的!

手寫裝飾器

現在我們要寫一個函數:

def add(x, y=10):return x + y

然後我們想看看運行的結果,於是寫了幾個 print 語句:

代碼馬上變得很複雜。但最重要的是,我們得寫一堆代碼(複製粘貼),程序員是懶惰的,所以我們就想到一些更簡單的方法,與其寫這麼多次,我們可以隻寫一次代碼:

作為一個懶惰的程序員,我們立馬就發現了,有一個 “模式” 反複出現,即執行一個函數,並計算這個函數的執行時間。於是我們就可以把這個模式抽象出來,用函數:

帶參數的裝飾器

我們知道下麵兩種代碼是等價的:

@decdef func(...):...func = dec(func)

我們可以把它當成是純文本的替換,於是可以是這樣的:

類作為裝飾器

如果說 Python 裏一切都是對象的話,那函數怎麼表示成對象呢?其實隻需要一個類實現__call__ 方法即可。

小結

裝飾器中還有一些其它的話題,例如裝飾器中元信息的丟失,如何在類及類的方法上使用裝飾器等。但本文裏我們主要目的是簡單介紹裝飾器的原因及一般的使用方法,能用上的地方就大膽地用上吧!

最後更新:2017-10-09 02:30:15

  上一篇:go 總結學習 Python的14 張思維導圖匯總
  下一篇:go python學習-抓取本地網頁元素