装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作。避免了在内部进行修改。
首先新建装饰器文件functool.py,写入装饰函数和定义的函数:
#注意@表示调用了装饰器 def wrapper(func): def result(): print("log:")#表示在函数前面定义要做的内容 func() return result @wrapper def f1(): print("foo1") @wrapper def f2(): print("foo2") @wrapper def f100(): print("foo100")然后,新建文件,导入上面工具:
import func_tool func_tool.f1() func_tool.f2() func_tool.f100()效果:
执行:
import func_tool ret = func_tool.f1() print("返回值:",ret)将返回None
执行结果:
执行:
import func_tool ret = func_tool.f1("I'm arg") print("返回值:",ret)报错: 解决方法: 修改装饰器:
def wrapper(func): def result(a): print("log:") ret = func(a) print("after") return ret return result @wrapper def f1(arg): print(arg) return 1遇到不同的函数输入,利用装饰器进行自适应的协调。
def wrapper(func): def result(*args,**kwargs): print("------begin----------") ret = func(*args,**kwargs) print("-------end----------") return ret return result @wrapper def f1(arg): print(arg) return 1 @wrapper def f2(arg1,arg2): print("{}+{}={}".format(arg1,arg2,(arg1+arg2)))执行:
import func_tool ret = func_tool.f1("I'm arg") print("f1返回值:",ret) ret = func_tool.f2(2,3) print("f2返回值:",ret)结果:
