Python装饰器
什么是装饰器
装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为这种需求就产生了装饰器,使得其满足:
- 不能修改被装饰的函数的源代码
- 不能修改被装饰的函数的调用方式
- 满足1、2的情况下给程序增添功能
在代码中见到@xxx那就是使用到了装饰器,简单来说@xxx就是把@xxx下面的函数传入xxx让xxx对传入的函数进行操作。
代码示例:
import time
def timer(func): # 5
def demo():
start = time.time()
func()
stop = time.time()
print(stop-start)
return demo
@timer # @timer的意思等同于:test = timer(test) ,如果要这样写应该写到定义test()之后 # 6
def test():
time.sleep(2)
print("test is running!")
test() # 7
执行结果:
test is running!
2.0299453735351562
解释:
首先,在#6处,把test作为参数传递给了timer(),此时,在timer()内部,func = test,接下来,定义了一个demo()函数,当并未调用,只是在内存中保存了,并且标签为demo。在timer()函数的最后返回demo()的地址demo。
然后再把demo赋值给了test,那么此时test已经不是原来的test了,也就是test原来的那些函数体的标签换掉了,换成了demo。那么在#7处调用的实际上是demo()。
那么这段代码在本质上是修改了调用函数,但在表面上并未修改调用方式,而且实现了附加功能。

浙公网安备 33010602011771号