python裝飾器簡介

來源:互聯網
上載者:User

標籤:python   模式   裝飾器   

在瞭解裝飾器的之前一定要先瞭解函數作為參數傳遞, 什麼是函數內嵌,請參考我之前寫的部落格函數簡介

python裝飾器思想有點類似設計模式的裝飾模式, 其意圖是動態地給函數對象添加額外的功能.比如像增加日誌列印的功能,有點面向切面編程(AOP)的感覺.

裝飾器文法

以@開頭,接著後面跟著的是裝飾器的名字和可選的參數.裝飾器文法是一種文法糖.
格式如下

@decomaker(deco_args)    def foo(func_opt_args)

可以組合,等價於foo = g(f(foo))

@g@fdef foo():    statement
簡單裝飾器

執行個體

#!/usr/bin/pythondef  deco(func):    print ‘start‘    func()    print ‘end‘    return func@decodef foo():    print ‘In foo‘foo()foo()

輸出

startIn fooendIn fooIn foo
帶內嵌函數裝飾器

內嵌函數保證每次新函數都被調用
執行個體

def  deco(func):    def _deco():    #該函數為內嵌函數        print ‘start‘        func()        print ‘end‘     return _deco@decodef foo():    print ‘In foo‘foo()foo()

輸出:

startIn fooendstartIn fooend
帶參數的裝飾器

需要自己返回以函數作為參數的裝飾器。換句話說,decomaker()用 deco_args 做了些事並返回
函數對象,而該函數對象正是以 foo 作為其參數的裝飾器。簡單的說來:foo = decomaker(deco_args)(foo)

執行個體

def  deco(arg):    def wrapper(func):        def _deco(x):            print "get param is: ", x            func(x)        return _deco    return wrapper  @deco("type1")def foo(x):    print ‘In foo‘foo(123)

輸出

get param is:  123In foo

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.