• Python学习


    1、装饰器的形成过程

    #   装饰器形成过程——简单版
    import time
    def func():
        time.sleep(0.01)
        print('QQ星、娃哈哈、爽歪歪')
    
    def timer(f):                       #   装饰器函数
        def inner():                    #   闭包函数
            start = time.time()
            f()                          #   被装饰的函数
            end = time.time()
            print(end - start)
        return inner
    
    func = timer(func)      #   可替换成语法糖
    func()
    #   语法糖
    import time
    def timer(func):
        def inner():
            start = time.time()
            func()
            print(time.time() - start)
        return inner
    
    @timer   #==> func1 = timer(func1)
    def func():
        print('in func')
    
    func()
    #   带一个参数
    import time
    def timer(func):
        def inner(a):
            start = time.time()
            func(a)
            print(time.time() - start)
        return inner
    
    @timer
    def func1(a):
        print(a)
    
    func1(1)
    #   多函数传参
    import time
    def timer(func):
        def inner(*args,**kwargs):
            start = time.time()
            re = func(*args,**kwargs)
            print(time.time() - start)
            return re
        return inner
    
    @timer   #==> func1 = timer(func1)
    def func1(a,b):
        print('in func1')
    
    @timer   #==> func2 = timer(func2)
    def func2(a):
        print('in func2 and get a:%s'%(a))
        return 'fun2 over'
    
    func1('aaaaaa','bbbbbb')
    print(func2('aaaaaa'))
    #   带返回值
    import time
    def timer(func):
        def inner(*args,**kwargs):
            start = time.time()
            re = func(*args,**kwargs)
            print(time.time() - start)
            return re
        return inner
    
    @timer   #==> func2 = timer(func2)
    def func2(a):
        print('in func2 and get a:%s'%(a))
        return 'fun2 over'
    
    func2('aaaaaa')
    print(func2('aaaaaa'))

    2、开放封闭原则

      1)对拓展是开放的

        我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改。所以我们必须允许代码扩展、添加新功能。

      2)对修改是封闭的

        就像我们刚刚提到的,因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户。

      3)装饰器完美的遵循了这个开放封闭原则。

    3、装饰器的固定结构

    #   装饰器的固定模式
    def wrapper(func):   #qqxing
        def inner(*args,**kwargs):
            ret = func(*args,**kwargs)   #被装饰的函数
            return ret
        return inner
    
    @wrapper        #qqxing = wrapper(qqxing)
    def qqxing(a):
        print(123,a)
    ret = qqxing(1)   #inner
  • 相关阅读:
    [数据知识]DAMA数据管理—引论
    How to clear/delete all the partition table from a disk or partition in Linux
    Rust Safe Coding Notes
    量化交易平台
    斯坦福大学——人工智能本科4年课程清单
    去中心化数字身份DID简介——五、DID的应用
    linux c 打印时间最简单的实例
    sqlalchemy中Column的默认值属性
    Ubuntu安装jdk8的两种方式
    面试官:手撕十大排序算法,你会几种?(转)
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/9370737.html
Copyright © 2020-2023  润新知