• 装饰器


    1.什么是装饰器?
    器指的是工具,可以定义成函数
    装饰指的是为其他事物添加额外的东西点缀
    合在一起的意思是:装饰器指的是定义一个函数,该函数为其他函数增加额外的功能
    2.为何要用装饰器?
    开放封闭原则:开放指的是对拓展功能是开放的,封闭指的是对修改源代码是封闭的
    装饰器就是在不修改被装饰器对象源代码以及调用方式的前提下为被修饰对象添加新功能
    # 需求:在不修改index函数的源代码以及调用方式的前提下为其添加统计运行时间的功能
    # def index(x,y):
    # time.sleep(3)
    # print('index %s %s' %(x,y))
    # 方案一:改变了源代码
    # import time
    # def index(x,y):
    # start_time=time.time()
    # time.sleep(1)
    # print('index %s %s' %(x,y))
    # end_time=time.time()
    # print("运行时间为:%s"%(end_time-start_time))
    # index(1,2)
    # 方案二:源代码不变 但出现代码冗余
    # import time
    # def index(x,y):
    # time.sleep(3)
    # print('index %s %s' %(x,y))
    # start_time=time.time()
    # index(1,2)
    # end_time=time.time()
    # print("运行时间为:%s"%(end_time-start_time))
    # start_time=time.time()
    # index(5,6)
    # end_time=time.time()
    # print("运行时间为:%s"%(end_time-start_time))
    # 方案三:源代码不变,冗余减小,但只对于index函数有效
    # import time
    # def index(x,y):
    # time.sleep(3)
    # print('index %s %s' %(x,y))
    # def wrapper(x,y):
    # start_time=time.time()
    # index(x,y)
    # end_time=time.time()
    # print("运行时间为:%s"%(end_time-start_time))
    # wrapper(1,2 )
    # 方案三优化:
    import time
    def timer(func):
    def wrapper(*args,**kwargs):
    start_time=time.time()
    res=func(*args,**kwargs)
    end_time=time.time()
    print("运行时间为:%s"%(end_time-start_time))
    return res
    return wrapper
    # timer=timer(index)
    # timer(1,2)
    @timer
    def index(x,y):
    time.sleep(3)
    print('index %s %s' %(x,y))
    index(5,6)
    @timer
    def haha():
    time.sleep(1)
    print("小朋友你是不是有很多问好?")
    return 666
    # timer=timer(haha)#@timer 等价于timer=timer(haha)
    # res=timer()
    # print(res)
    haha()
  • 相关阅读:
    国内外手机号码正则表达式
    apt安装Neo4j
    经典决策树模型
    自动文档摘要评价方法
    scrapy-splash解析javascript
    ubuntu安装splash
    iptables的删除命令中的相关问题
    ARTS第七周
    ARTS第六周
    ARTS第五周
  • 原文地址:https://www.cnblogs.com/mayrain/p/12555381.html
Copyright © 2020-2023  润新知