Python装饰器

什么是装饰器

装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为这种需求就产生了装饰器,使得其满足:

  1. 不能修改被装饰的函数的源代码
  2. 不能修改被装饰的函数的调用方式
  3. 满足1、2的情况下给程序增添功能

在代码中见到@xxx那就是使用到了装饰器,简单来说@xxx就是把@xxx下面的函数传入xxxxxx对传入的函数进行操作。

代码示例:

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()。

那么这段代码在本质上是修改了调用函数,但在表面上并未修改调用方式,而且实现了附加功能。

转载地址-详解推荐

posted @ 2018-09-29 10:14  每一天,为明天。  阅读(62)  评论(0)    收藏  举报