python中的裝飾器

來源:互聯網
上載者:User

python中的裝飾器

什麼是裝飾器

假設有函數A,B,C,已經全部編寫完成,這時你發現A, B, C都需要同一個功能,這時該怎麼辦?

答: 裝飾器

裝飾器其實就是一個函數,不過這個函數的傳回值是一個函數

個人理解,裝飾器主要就是為了完成上邊的這個功能,將A, B, C 函數包裹在另一個函數D中,D函數在A函數執行之前或之後,處理一些事情

 

#!/usr/bin/env python #coding:utf-8def SeparatorLine():    print "############################"#裝飾器帶參數函數帶參數    def DecratorArgFuncArg(f1,f2):    def inner(func):        def wrapper(arg):            print "裝飾器帶參數函數帶參數"            f1()                   result =  func(arg)            f2()            return result           return wrapper    return inner#裝飾器帶參數函數不帶參數def DecratorArgFuncNoArg(f1,f2):    def inner(func):        def wrapper():            print "裝飾器帶參數函數不帶參數"            f1()                   result=func()            f2()            return result        return wrapper    return inner#函數沒有參數的裝飾器def FuncNoArgDecrator(func):    def wrapper():        print "函數沒有參數的裝飾器"               func()    return wrapper#函數有參數的裝飾器def FuncArgDecrator(func):    def wrapper(arg):        print "函數有參數的裝飾器"               func(arg)    return wrapper#函數有傳回值的裝飾器def FuncReturnDecrator(func):    def wrapper():        print "函數有傳回值的裝飾器"               result=func()        return result    return wrapper#這兩個函數用def login():    print '開始登入'   def logout():    print '退出登入'@FuncArgDecratordef Lee(arg):    print 'I am %s' %arg@FuncNoArgDecratordef Marlon():    print 'i am Marlon'@DecratorArgFuncNoArg(login,logout)def Allen():    print 'i am Allen'  @DecratorArgFuncArg(login,logout)def Aswill(name):    print 'I am %s' %name  @FuncReturnDecratordef Frank():    return 'I am frank'if __name__=='__main__':    SeparatorLine()    Lee('Lee')    SeparatorLine()    Marlon()    SeparatorLine()    Allen()    SeparatorLine()    Aswill('Aswill')    SeparatorLine()    result = Frank()    print result


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.