zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    深入理解Java虚拟机-走进Java
    springboot服务引入外部jar包在windows运行正常,在linux环境上无法加载到引入jar包的类
    ActiveMQ数据接收类型问题
    kafka报文一直打印的问题
    Java基本语法
    flask跨域问题
    flask接口传参
    iTextSharp导出PDF模板(报告)
    ASP.NET中<%=%>、<%%>、<%@%>、<%#%>的用法与区别
    python AES+SHA1PRNG
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/9370737.html
Copyright © 2011-2022 走看看