python装饰器--原来如此简单,python中什么是装饰器
Python decorator是Python的重要特性之一,通过它可以在执行现有操作的同时执行其他操作。装饰器的主要功能是在不改变原始函数和类的内部实现的情况下扩展其函数。这是装修工最大的特点。
今天主要讲解python decorator的实现细节。
1.首先是装修工的构成和使用。
Python的decorator实际上是闭包的实现。的装饰器可以通过以下形式的双层函数来实现。
Defouter(func_name) :#fun_name是一个参数,通常是一个函数对象。
definert(* Args,**kwargs) :#*args和**kwargs是传递给func_name函数执行的参数
#其他操作
使服从
RES=func_name(*Args,**kwargs)))))))))).
做某事
返回结果
返回输入
解释
以上是常见的decorator形式,主要说明func_name不仅仅是函数之一,也可以是类或者类的方法,主要看使用方法。装饰器的使用也很简单,用就行了。
@ decorater _ name
其中decorater _ name是装饰名称。
使用
代码如下所示。
定义(函数):
#@wraps(func)
EFwrapper(*Args,**kwargs)):
开始=时间.时间(
RES=func(*Args,**kwargs))))))))RES=func(* Args,* * kwargs)))))))))))))))).
end=time.time(
dis=结束-开始
打印(“运行时间”、“小时”)。
返回结果
返回包装
@timethis
定义倒计时(n):
而n 0:
n -=1
上面的代码是一个装饰器的完整示例,其中timethis是我们定义的装饰器的名称,只有将其放在所需的扩展函数上才能使用。
4.装饰者等待参数
其实除了上面的用法,装饰者还可以写参数。格式如下
defdecorator(*dec_args,**dec_kwargs):
efouter(func_name):
EFinner(*Args,**kwargs)):
做某事
RES=func(*Args,**kwargs))))))))RES=func(* Args,* * kwargs)))))))))))))))).
做某事
返回结果
返回输入
输出
以上是写参数的修饰形式,最外层的函数是修饰的名字,外层函数的参数是函数或者类对象,内层函数的参数是执行函数需要的I参数。按如下方式使用:
deftimethis(name=哈哈 ) :
#@wraps(func)
除雾器(功能) :
是打印(姓名)
EFwrapper(*Args,**kwargs)):
开始=时间.时间(
RES=func(*Args,* * kwargs))))))))RES=func(* Args,* * kwargs))))))RES)))))))))))kwarkwarks)
end=time.time(
dis=结束-开始
打印(“运行时间”、“小时”)。
返回结果
返回包装
输出
@timethis(heheh)).
定义倒计时(n):
而n 0:
n -=1
如您所见,带参数的装饰器可以像函数调用一样使用。
5.示例操作
执行示例如下所示。
呵呵
驾驶时间为0.50000000001
但是,如果执行这些功能时带有修饰,则会损失一些属性。
倒计时。__name__#为第三个代码
"包装"
输出函数的名字不是函数的名字,但这也是今天解法的要点。
6 .包装功能
Wraps函数的出现是为了解决用decorators修饰函数时丢失的一些属性。它使用以下代码
倒计时。__姓名_ _
“倒计时”
所以函数名就是原函数的名字,函数的其他属性也是,这就是wraps的作用。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。