zoukankan      html  css  js  c++  java
  • 装饰器(Python)

    装饰器(Decorators)是Python的一个重要部分,简单的说:是修改其他函数功能的函数。有助于让我们的代码更简短。为已经存在的函数或对象添加额外的功能.

    1.带参装饰器

    a.@装饰器() 传参

    import time
    
    #装饰器 #计算时间差 def getTime(name): def getCutTime(func): local_time
    = time.time() #print('当前用户:' + name + ',当前时间:' + str(time.time())) print('当前运行函数名称:' + func.__name__) func() res = time.time() - local_time print('运行时间差:' + str(res)) #如果是main()后面需要实例化的话,则需要返回main回去,否则不用 #return func return getCutTime #语法糖 @getTime('alex') def main(): print('开始执行main') for i in range(100): time.sleep(0.01) pass print('结束执行main') #返回的func,然后func()单单是执行这个main()实例化操作,gettime装饰器是将func功能丰富了一下(也就是main原函数) main

    执行结果:

    当前运行函数名称:main
    开始执行main
    结束执行main
    运行时间差:1.0788896083831787

     b.main()里面传参(不定长参数)

    #带参数装饰器
    def Calu(func):
        def inner(*args, **kwargs):
            start_time = time.time()
            func()
            end_time = time.time()
            print('当前执行人:{}, 年龄:{},执行时间:{}'.format(*args, end_time - start_time))
        return inner 
    
    @Calu
    def main():
        print('开始执行')
        for i in range(1, 10):
            time.sleep(0.1)
    
    main('alex',14)

     执行结果:

    开始执行
    当前执行人:alex, 年龄:14,执行时间:0.9055602550506592

    c.如果原函数里面带参数的话(使用*arges,**kwargs 或者指定名称接受均可以)

    import time
    
    #计算时间差
    def getTime(level):
        def getCutTime(func):
            def inner(name):
                local_time = time.time()
                #print('当前用户:' + name + ',当前时间:' + str(time.time()))
                print('当前运行函数名称:' + func.__name__)
                func(name)
           #func(*args, **kwargs) res
    = time.time() - local_time print('运行时间差:' + str(res)) #如果是main()后面需要实例化的话,则需要返回main回去,否则不用 #return func return inner return getCutTime @getTime('1') def main(name_ori): print('开始执行main') for i in range(100): time.sleep(0.01) pass print('结束执行main') #返回的func,然后func()单单是执行这个main()实例化操作,gettime装饰器是将func功能丰富了一下(也就是main原函数) main('aa')

    执行结果:

    当前运行函数名称:main
    开始执行main
    结束执行main
    运行时间差:1.0813817977905273
  • 相关阅读:
    第12周作业
    一张表格秒懂MES制造执行系统与ERP的区别关系
    spring boot:用dynamic-datasource-spring-boot-starter配置druid多数据源(spring boot 2.3.3)
    spring boot:使mybatis访问多个druid数据源(spring boot 2.3.2)
    linux(centos8):安装分布式事务服务seata(file单机模式,seata 1.3.0/centos 8.2)
    spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)
    spring boot: 用thymeleaf嵌套循环展示多层数据(spring boot 2.3.2)
    cmd 命令设置环境变量
    AtCoder Grand Contest 047
    AtCoder Grand Contest 032
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13624621.html
Copyright © 2011-2022 走看看