• 装饰器(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
  • 相关阅读:
    Redis源码分析(十二)--- redis-check-dump本地数据库检测
    Redis源码分析(十二)--- redis-check-dump本地数据库检测
    Redis源码分析(十二)--- redis-check-dump本地数据库检测
    Redis源码分析(十三)--- redis-benchmark性能测试
    Redis源码分析(十四)--- rdb.c本地数据库操作
    Redis源码分析(十三)--- redis-benchmark性能测试
    Redis源码分析(十四)--- rdb.c本地数据库操作
    Redis源码分析(十四)--- rdb.c本地数据库操作
    去除移动端点击事件出现的背景框 tap-highlight-color
    php源码分析之PHPAPI宏的作用
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13624621.html
Copyright © 2020-2023  润新知