python中的裝飾器,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