装饰器的意义就是保持test原函数不修改,调用方式也不改变,添加额外的功能。
实例如下:
import time
def timer(func):
def deco():
start = time.time()
func()
print("during:" , time.time()-start)
return deco
@timer
def test():
for i in range(100000000):
pass
print("***")
test()
# ***
# during: 2.6944661140441895
@timer 可以看作是执行了 test = timer(test),那么在调用test的时候,调用的实际上是timer中嵌套的deco函数。
如果test函数带有参数,只需稍作修改。
def timer(func):
def deco(a, b):
start = time.time()
func(a, b)
print("during:" , time.time()-start)
return deco
@timer
def test(a, b):
for i in range(100):
pass
print("{}".format(a+b))
test(1,2)
如果test有返回值, 稍作修改
def timer(func):
def deco(a, b):
start = time.time()
res = func(a, b)
print("during:" , time.time()-start)
return res
return deco
@timer
def test(a, b):
print("{}".format(a+b))
return (a+b)
test(1,2)