142
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