python中装饰器是什么

  介绍

这篇文章主要介绍了python中装饰器是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

合理使用装饰器可以简化开发,并且使得代码更加清晰。下面我们分别介绍两种装饰器,不带参数的装饰器和带参数的装饰器。

<强>一、不带参数的装饰器

我们用一个实际的例子来引入装饰器的概念,比如我们现在有一个方法(),然后我们需要在方法一个()执行之前在终端打印“功能running",这时候我们可以在方法一个()的开始部分加上下面的代码:

打印(“function  is  running")

但是如果我们不想修改方法一个()的代码,也可以重新写一个方法修饰符(),然后把一个()作为入参,代码如下:

def 装饰(有趣的):   ,,,@functools.wraps(有趣)   ,,,def 包装器(* args,, * * kwargs):   ,,,,,,,印刷(“Method  is  running")   ,,,,,,,return 有趣的()   ,,,return 包装

python中的方法可以作为参数传入另一个方法,所以当我们执行装饰(A)的时候,返回的是一个方法,这个方法的本质是先执行打印语句,然后再执行()。

但是这样我们的调用代码就需要进行修改,也就是说之前调用方法(),现在的写法是调用装饰(A)(),为了不影响调用的代码,我们使用python的语法糖改造方法一个()的代码。

@decorator   def  ():   ,,,#,do 一些

实际上只是在一个()的前面加上一行@decorator,这样在我们的调用代码就不需要改变了。

装饰器中的@functools.wraps(有趣)是为了保证返回的方法__name__属性和入参方法有趣的__name__属性相同。

<强>二,带入参的装饰器

在上面不带参数的装饰器中,我们实现了在执行方法的()之前打印一行固定的字符串,如果我们想要打印不同的字符串就需要用带参数的装饰器。实际上就是在不带参数的装饰器上再封装一层即可,代码如下:

def  decorator_par(名称):   ,,,def 装饰(有趣的):   ,,,,,,,@functools.wraps(有趣)   ,,,,,,,def 包装器(* args,, * * kwargs):   ,,,,,,,,,,,印刷(“Method  {}, is  running" .format(名字))   ,,,,,,,,,,,return 有趣的()   ,,,,,,,return 包装   ,,,return 装饰

这样我们就可以在使用装饰器的时候设置参数名,实现打印不同的信息。完整的代码如下:

import  functools   ,   def  decorator_par(名称):   ,,,def 装饰(有趣的):   ,,,,,,,@functools.wraps(有趣)   ,,,,,,,def 包装器(* args,, * * kwargs):   ,,,,,,,,,,,印刷(“Method  {}, is  running" .format(名字))   ,,,,,,,,,,,return 有趣的()   ,,,,,,,return 包装   ,,,return 装饰   ,   @decorator_par (“A")   def  ():   ,,,print(“小姐:am  A")   ,   @decorator_par (“B")   def  B ():   ,,,print(“小姐:am  B")   ,   一()   B ()

执行输出为:

Method  A  is 运行   小姐:am    Method  B  is 运行   小姐:am  B

可以看到我们在不改变方法调用代码的情况下,实现了在该方法之前打印特定的信息。

感谢你能够认真阅读完这篇文章,希望小编分享python中装饰器是什么内容对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,遇到问题就找,详细的解决方法等着你来学习!

python中装饰器是什么