Python裝飾器是精通Python的第一道關卡!看大牛是怎麼理解它的!
最新
10-07
手寫裝飾器
現在我們要寫一個函數:
def add(x, y=10):return x + y
然後我們想看看運行的結果,於是寫了幾個 print 語句:
代碼馬上變得很複雜。但最重要的是,我們得寫一堆代碼(複製粘貼),程序員是懶惰的,所以我們就想到一些更簡單的方法,與其寫這麼多次,我們可以只寫一次代碼:
作為一個懶惰的程序員,我們立馬就發現了,有一個 「模式」 反覆出現,即執行一個函數,並計算這個函數的執行時間。於是我們就可以把這個模式抽象出來,用函數:
帶參數的裝飾器
我們知道下面兩種代碼是等價的:
@decdef func(...):...func = dec(func)
我們可以把它當成是純文本的替換,於是可以是這樣的:
類作為裝飾器
如果說 Python 里一切都是對象的話,那函數怎麼表示成對象呢?其實只需要一個類實現__call__ 方法即可。
小結
裝飾器中還有一些其它的話題,例如裝飾器中元信息的丟失,如何在類及類的方法上使用裝飾器等。但本文里我們主要目的是簡單介紹裝飾器的原因及一般的使用方法,能用上的地方就大膽地用上吧!


※Python調用MySQL模塊初試
※如何使用Python Impyla客戶端連接Hive和Impala
※Python高薪系統學習班,機不可失失不再來
※最全Pycharm使用教程-(三)
※最全Pycharm使用教程-(二)
TAG:Python |