python 3!,用python2还是python3
另一方面,不带参数的Decorator 不带参数的decoration的函数return function写了多个 deflog(func):(函数 def wrapper 执行的日志)" 3360 ppper decoration 1 start。)func returnwrapperdef log _ in(func): 函数执行日志 def wrapper): print))装饰2开始。defhello():"简单函数模拟" "打印" " hello world ") if _ _ name _= _ maint
2.参数为1的装饰者。添加decorator的函数没有参数,decorator嵌套在原decorator之外。外部嵌套参数可用于查看hello()的打印结果
2.有些函数有参数。如果参数本身有内置的参数定义,就需要传递这些函数。
如果函数返回值,内饰会先临时保存结果再返回。
from functoolsimportwrapsdesflog(name=none):)" "是函数执行日志(" def decorator " func):@ wrapps))func # def wrapper(* args * kwargs(:)是传统魔术方法传递的" " decorator内部函数" #"。Interior designer更改原始函数名文档信息并打印出来”({0} start。格式)。格式(func。_ _ doc _ _))此处,文档信息打印)-包装器3360 {0} 。格式(func。_ _ name _))改了结尾。).格式?Name))返回temp #包装器。_ _ doc _=func。_ _ doc))包装。_ _ name _=func)在这里,必须传递参数而不是缺省的Nonedef hello)。if _ name _= _ _ main _ :print( doc:{ 0 } 。格式)
虽然必须读取from functools导入包装,但是在decorator内部打印文档信息和包装函数的名称时(如果函数前没有添加@ wraps,则在main方法中为hello),会出现以下结果。
2.1注释掉@ wraps的运行结果后获得的hello文档信息被更改
2.2添加@ wraps的执行结果
1.总结。添加内部提供的decorator @wraps,这样decorator就可以被之前写的函数重用,然后原本函数的信息不会发生改变,所以每次写decorator都要添加@wraps。
2.如果函数有参数,参数也会在装饰器内部传递。使用魔法方法*args,**kwargs在装饰器内部传参
3.在函数中添加))函数有返回值。请用decorator内部的临时变量保存结果,并返回到最后。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。