Python中的Decorator装饰器的使用示例

 更新时间:2022年12月01日 10:41:22   作者:漂泊的小森  
装饰器(decorator)在Python框架中扮演着重要角色,是Python中实现切面编程(AOP)的重要手段,本文将通过简单的示例和大家介绍下具体的使用方法,希望对大家有所帮助

#最近在网上看代码时,出现了@???的代码,看了好久也不知道是什么意思,经过了解原来是装饰器,我给大家举个例子讲解一下,帮助大家快速理解:

##大家在写函数的时候,可能会想测试这个函数的运行时间,如果每个函数都加一个类似于:

start=time.time()
函数主体
over=time.time()
Time=over-start
print(Time)
def haha():
    start=time.time()
    for i in range(1200):
        if i%2==0:
            print('这是个偶数:',i)
    over=time.time()
    print("总共花费的时间:",over-start)
haha()

这样函数的可读性也不高,如果要测试好几个函数还会大量浪费时间。

下面引入装饰器:

1简单的装饰器操作:

(先定义一个函数1(里面传递一个参数),然后在函数1里面再定义一个函数2负责计算时间,并在时间中间调用定义函数1的参数,然后返回这个函数2):

!!!当我们想调用装饰器时,只需@函数1的名字,放在想要使用的函数前面即可。

import time
def decorator(fun):
    def wrapper():
        t1=time.time()
        fun()
        t2=time.time()
        print('总共花费的时间:',t2-t1)
    return wrapper
@decorator
def haha():
    #start=time.time()
    for i in range(1200):
        if i%2==0:
            print('这是个偶数:',i)
    #over=time.time()
    #print("总共花费的时间:",over-start)
haha()

2,装饰器升级版(如果我们想套用的函数中,具有返回对应的值这个功能共时使用):

例如这个函数:

def haha():
    a=0
    #start=time.time()
    for i in range(1200):
        if i%2==0:
            print('这是个偶数:',i)
            a=a+i
    return a

#我们如果还用1中的装饰器就不能返回对应的值,这就需要改动装饰器:

(在装饰器中也要把函数中定义参数的返回值给表示出来,并且利用return 给返回值,输出出来)

import time
def decorator1(fun):
    def wrapper2():
        t1=time.time()
        result=fun()
        t2=time.time()
        print('总共花费的时间:',t2-t1)
        return result
    return wrapper2
@decorator1
def haha():
    a=0
    #start=time.time()
    for i in range(1200):
        if i%2==0:
            print('这是个偶数:',i)
            a=a+i
    return a
    #over=time.time()
    #print("总共花费的时间:",over-start)
aaa=haha()
print(aaa)

可能有同学会问,为什么后面要用到aaa=haha(),

这是因为我们要接受返回值result,并将其用print()打印出来。

3,装饰器的升级升级版(当我们需要使用的函数haha中,不但有返回值,还有传入的参数时使用。)

(只需要在我们的函数2和调用的函数1中的参数()里面加上关键字传参*args,即可)

import time
def decorator1(fun):
    def wrapper2(*args):
        t1=time.time()
        result=fun(*args)
        t2=time.time()
        print('总共花费的时间:',t2-t1)
        return result
    return wrapper2
@decorator1
def haha(key):
    a=0
    #start=time.time()
    for i in range(key):
        if i%2==0:
            print('这是个偶数:',i)
            a=a+i
    return a
    #over=time.time()
    #print("总共花费的时间:",over-start)
aaa=haha(1200)
print(aaa)

可不要忘了,调用函数haha时要传入参数哦。

到此这篇关于Python中的Decorator装饰器的使用示例的文章就介绍到这了,更多相关Python Decorator内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch collate_fn的基础与应用教程

    pytorch collate_fn的基础与应用教程

    这篇文章主要给大家介绍了关于pytorch collate_fn基础与应用的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • shell命令行,一键创建 python 模板文件脚本方法

    shell命令行,一键创建 python 模板文件脚本方法

    下面小编就为大家分享一篇shell命令行,一键创建 python 模板文件脚本方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • python中getattr函数使用方法 getattr实现工厂模式

    python中getattr函数使用方法 getattr实现工厂模式

    这篇文章主要介绍了python中getattr()这个函数的一些用法,大家参考使用吧
    2014-01-01
  • 在Mac中PyCharm配置python Anaconda环境过程图解

    在Mac中PyCharm配置python Anaconda环境过程图解

    这篇文章主要介绍了在Mac中PyCharm配置python Anaconda环境过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python发送邮件功能示例【使用QQ邮箱】

    Python发送邮件功能示例【使用QQ邮箱】

    这篇文章主要介绍了Python发送邮件功能,结合实例形式分析了Python使用QQ邮箱进行邮件发送的相关设置与使用技巧,需要的朋友可以参考下
    2018-12-12
  • Scrapy抓取京东商品、豆瓣电影及代码分享

    Scrapy抓取京东商品、豆瓣电影及代码分享

    Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
    2017-11-11
  • Python区块链创建Block Class教程

    Python区块链创建Block Class教程

    这篇文章主要为大家介绍了Python区块链创建Block Class教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python程序中调用其他程序的实现

    python程序中调用其他程序的实现

    本文主要介绍了python程序中调用其他程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 使用python-cv2实现Harr+Adaboost人脸识别的示例

    使用python-cv2实现Harr+Adaboost人脸识别的示例

    这篇文章主要介绍了使用python-cv2实现Harr+Adaboost人脸识别的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Python装饰器模式定义与用法分析

    Python装饰器模式定义与用法分析

    这篇文章主要介绍了Python装饰器模式定义与用法,结合实例形式分析了Python装饰器模式的具体定义、使用方法及相关操作技巧,需要的朋友可以参考下
    2018-08-08

最新评论