盡量有中文的資料,淺顯一些,好理解的,謝謝
回複內容:
簡單來講,可以不嚴謹地把Python的裝飾器看做一個封裝函數的函數。
比如,有一個函數:
def func(): print 'func() run.'if '__main__' == __name__: func()
StackOverflow 上有一個關於 python decorators 的問題,這個回答做了很詳細的解釋,可以好好看看。
How can I make a chain of function decorators in Python?
`func = decorator(func)` 的文法糖先理解一下閉包的概念吧,之前回答過一個有關閉包和裝飾器的問題,可以參考一下:
Python 裡函數裡返回一個函數內部定義的函數? - 知乎使用者的回答內建文法糖 格式優美 逼格較高
在代碼中使用洽到好處的裝飾器瞬間讓代碼優美很多
寫起來也很簡單 無參的裝飾器參數是要裝飾的函數 有參裝飾器參數是需要的參數 最後返回的是內建函式 參考http://m.blog.csdn.net/blog/yueguanghaidao/10089181
之前給出一個連結, 現在嘗試用自己方式梳理一下 # 有時愛用蹩腳的英文注釋, 唔.
>>
# 先從函數說起
def foo1(): print('this is a function')foo1() # print ... in console.
裝飾器本質上是一個函數,該函數用來處理其他函數,它可以讓其他函數在不需要修改代碼的前提下增加額外的功能,裝飾器的傳回值也是一個函數對象。它經常用於有切面需求的情境,比如:插入日誌、效能測試、交易處理、緩衝、許可權校正等應用情境。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函數功能本身無關的雷同代碼並繼續重用。概括的講,裝飾器的作用就是為已經存在的對象添加額外的功能。
先來看一個簡單例子:
def foo(): print('i am foo')
在文法層面支援aop我初學,感覺就是把一個函數封裝成另一個函數的一部分,能用.attributes訪問。來個乾貨,我的總結:Python Decorators 裝飾器總結Decorators-for-Functions-and-Methods-Python
。獻醜了,歡迎探討。