如何理解Python裝飾器?

來源:互聯網
上載者:User
盡量有中文的資料,淺顯一些,好理解的,謝謝

回複內容:

簡單來講,可以不嚴謹地把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 。獻醜了,歡迎探討。
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.