python三层装饰器,python2装饰器
定义跟踪(函数) :
EFwrapper(*Args,**kwargs)):
result=func(*Args,* * kwargs))))))))result=func(* Args,* * kwargs)))))result)(结果)(结果)(结果)(结果)(结果)(结果)(结果)(结果)
打印(“%s(%r,%r )-%r))函数__name_,args,kwargs,result))
返回结果
返回包装
@tracer
defFibonacci(n):
如果nin (0,1):
返回
return(Fibonacci(n-1)Fibonacci(n-2))
斐波那契(3).
是打印(斐波那契)
打印(帮助:).
是帮助(斐波那契)
从执行结果中,最后一个函数对象变为包装,而不是斐波那契函数对象。
由于斐波那契函数位于装饰器中,因此包装材料对象被分配给斐波那契函数对象,即fibnacchi=wrapper。
使用functools.wraps:
这意味着原始函数的属性无效
如果希望保留原始函数的属性,可以使用functools.wraps
从函数工具导入包装
定义跟踪(函数) :
@wraps(func)
EFwrapper(*Args,**kwargs)):
result=func(*Args,* * kwargs))))))))result=func(* Args,* * kwargs)))))result)(结果)(结果)(结果)(结果)(结果)(结果)(结果)(结果)
打印(“%s(%r,%r )-%r))函数__name_,args,kwargs,result))
返回结果
返回包装
@tracer
defFibonacci(n):
如果nin (0,1):
返回
return(Fibonacci(n-1)Fibonacci(n-2))
斐波那契(3).
是打印(斐波那契)
打印(帮助:).
是帮助(斐波那契)
执行functools.wraps后,将函数重新分配给原始函数包装=斐波那契。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。