语法糖
之前我们使用装饰器时,是为了增加func()函数的功能,有保证func()函数不改变,代码独立性,但是对外还是调用func()函数,然而实现的功能是扩展了之后的,我们是这样做的:
import time def func(): print("哈哈哈哈") def wrapper(f): def inner(): start=time.time() time.sleep(0.01) f() end=time.time() print(end-start) return inner func=wrapper(func) func()
上面的那句func=wrapper(func)其实可以不用写,而是在被装饰函数func()的上面加上@装饰器函数的函数名
import time def wrapper(f): #装饰器函数 def inner(): start=time.time() time.sleep(0.01) f() end=time.time() print(end-start) return inner @wrapper #在被装饰函数的上面(紧挨着)加上@装饰器函数名 效果等同于下面的func=wrapper(func) def func(): #被装饰的函数 print("哈哈哈哈") # func=wrapper(func) func()
这样就更明显了,直接就好像仍然是调用了func()函数,却好像对原来的func()函数功能进行了扩展;
被装饰的函数func()带有返回值
import time def wrapper(f): #装饰器函数参数为被装饰函数的函数名 def inner(): start=time.time() time.sleep(0.01) ret=f() end=time.time() print(end-start) return ret return inner @wrapper def func(): return '哈哈哈哈' #被装饰函数带有返回值 ret=func() #是有返回值的 print(ret)
程序执行过程: