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