zoukankan      html  css  js  c++  java
  • day19---叠加多个装饰器

    1、多个装饰器的叠加

    # 加载顺序:自下而上
    # 执行顺序:自上而下

    2、如下

    @deco1      
    @deco2      
    @deco3(111)
    def index(x,y):
    
    index = deco1(deco2(deco3(index)))

    分析过程如下:

    def deco1(func1): # func1 = wrapper2的内存地址
        def wrapper1(*args,**kwargs):
            print('正在运行===>deco1.wrapper1')
            res1=func1(*args,**kwargs)
            return res1
        return wrapper1
    
    def deco2(func2): # func2 = wrapper3的内存地址
        def wrapper2(*args,**kwargs):
            print('正在运行===>deco2.wrapper2')
            res2=func2(*args,**kwargs)
            return res2
        return wrapper2
    
    def deco3(x):
        def outter3(func3): # func3=被装饰对象index函数的内存地址
            def wrapper3(*args,**kwargs):
                print('正在运行===>deco3.outter3.wrapper3')
                res3=func3(*args,**kwargs)
                return res3
            return wrapper3
        return outter3
    
    
    # 加载顺序自下而上(了解)
    @deco1      # index=deco1(wrapper2的内存地址)        ===> index=wrapper1的内存地址
    @deco2      # index=deco2(wrapper3的内存地址)        ===> index=wrapper2的内存地址
    @deco3(111) # ===>@outter3===> index=outter3(index) ===> index=wrapper3的内存地址
    def index(x,y):
        print('from index %s:%s' %(x,y))
    
    # 执行顺序自上而下的,即wraper1-》wrapper2-》wrapper3
    index(1,2) # wrapper1(1,2)
  • 相关阅读:
    css 如何让背景图片拉伸填充避免重复显示
    CDHtmlDialog 基本使用
    RES协议
    Sata win7 热插拔(AHCI)
    __argc和__argv变量
    MFC进度条刷新处理
    SVN强制注释
    自动build服务器 CruiseControl.NET
    opencv Mat 像素操作
    std::string 用法
  • 原文地址:https://www.cnblogs.com/surpass123/p/12567220.html
Copyright © 2011-2022 走看看