什么是装饰器
如果有函数A,B,C,已经所有编写完毕。这时你发现A, B, C都须要同一个功能,这时该怎么办?
答: 装饰器
装饰器事实上就是一个函数,只是这个函数的返回值是一个函数
个人理解。装饰器主要就是为了完毕上边的这个功能,将A, B, C 函数包裹在还有一个函数D中。D函数在A函数运行之前或之后,处理一些事情
#!/usr/bin/env python #coding:utf-8 def 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 '退出登录' @FuncArgDecrator def Lee(arg): print 'I am %s' %arg @FuncNoArgDecrator def 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 @FuncReturnDecrator def Frank(): return 'I am frank' if __name__=='__main__': SeparatorLine() Lee('Lee') SeparatorLine() Marlon() SeparatorLine() Allen() SeparatorLine() Aswill('Aswill') SeparatorLine() result = Frank() print result