• day17


    装饰器:1.what
    器:指的就是一种工具,可以定义成函数
    装饰:指的就是为其他事物添加额外的点缀
    合在一起:指的就是定义一个函数用来装饰其他函数也就是为其他函数添加额外功能的
    2.why
    开放封闭原则:
    开放:是对拓展功能来说是开放的
    封闭:是对源代码的修改是封闭的
    装饰器就是在不修改源码的情况下为装饰对象添加额外的功能,源码包括函数的定义和调用两个过程
    3.how
    # 需求:在不修改index函数的源代码以及调用方式的前提下为其添加统计运行时间的功能
    import time
    time.time()获取当前时间
    def index(x,y):
    time.sleep(3)
    print('index %s %s' %(x,y))

    index(111,222)
    index(y=111,x=222)
    index(111,y=222)

    解决方案一:失败
    # 问题:没有修改被装饰对象的调用方式,但是修改了其源代码
    # def index(x,y):
    # start=time.time()
    # time.sleep(3)
    # print('index %s %s' %(x,y))
    # stop = time.time()
    # print(stop - start)
    #
    # index(111,222)

    # 解决方案二:
    # 问题:没有修改被装饰对象的调用方式,也没有修改了其源代码,并且加上了新功能
    # 但是代码冗余
    # import time
    #
    # def index(x,y):
    # time.sleep(3)
    # print('index %s %s' %(x,y))
    #
    # start=time.time()
    # index(111,222)
    # stop=time.time()
    # print(stop - start)

    # 解决方案三:
    # 问题:解决了方案二代码冗余问题,但带来一个新问题即函数的调用方式改变了
    import time

    def index(x,y):
    time.sleep(3)
    print('index %s %s' %(x,y))

    def wrapper():
    start=time.time()
    index(111,222)
    stop=time.time()
    print(stop - start)

    wrapper()

    def index(x,y,z):
    time.sleep(3)
    print('index %s %s %s' %(x,y,z))

    print(index)

    def outter(func):
    # func = index的内存地址
    def wrapper(*args,**kwargs):
    start=time.time()
    func(*args,**kwargs) # index的内存地址()
    stop=time.time()
    print(stop - start)
    return wrapper

    index=outter(index) # f=outer(index的内存地址)
    # f=当初那个wrapper函数的内存地址
    print(index)

    # index(x=1,y=2,z=3)
    # index(1,2,3)
    index(1,z=3,y=2)
    语法糖:在被装饰函数的上方,放一个@装饰器名代替了index=outter(index) # f=outer(index的内存地址)的工作

  • 相关阅读:
    SQL Server 触发器
    T-SQL查询进阶-10分钟理解游标
    有关T-SQL的10个好习惯
    iOS 画虚线以及drawRect的使用总结:
    iOS一个for循环实现,几行 几列 的布局形式
    IOS 符合某类型的子视图批量从父视图中移除
    DESC 和 ASC
    把数组格式数据转换成字符串存入数据库
    Swift :?和 !
    Swift 类构造器的使用
  • 原文地址:https://www.cnblogs.com/Jicc-J/p/12555613.html
Copyright © 2020-2023  润新知