標籤:bsp lin env 處理 函數 app sni blog on()
什麼是裝飾器
如果有函數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
python中的裝飾器