装饰器(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

 

posted @ 2020-09-07 03:10  风不再来  阅读(120)  评论(0编辑  收藏  举报