zoukankan      html  css  js  c++  java
  • 装饰器

    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()
  • 相关阅读:
    tiff遥感图像空间坐标转换(工作太忙,仅仅作为记录)
    get_beijing_roadnetwork(工作太忙,仅仅作为记录)
    xml_result_2_taos_db(工作太忙,仅仅作为记录)
    Hadoop HDFS原理详解(系统性回顾)
    基于Mapreduce数据排序
    Hadoop-Mapreduce-英文单词计数(Brief版本-超详细解读)
    Hadoop-Mapreduce-英文单词计数
    常见数据类型-HadoopDataType(仅仅作为记录)
    GeoServer 一键发布 Raster 数据服务(分片上传、GDAL)
    GeoServer 安装、跨域
  • 原文地址:https://www.cnblogs.com/mayrain/p/12555381.html
Copyright © 2011-2022 走看看