zoukankan      html  css  js  c++  java
  • Python正课41 —— 叠加多个装饰器分析

    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12564486.html

    一:叠加多个装饰器的加载、运行分析(了解***)

    def deco1(func1):   #func1 = wrapper2的内存地址
        def wrapper(*args,**kwargs):
            print('正在运行======>deco1.wrapper1')
            res1 = func1(*args,**kwargs)    # func1是wrapper2
            return res1
        return wrapper
    
    def deco2(func2):   #func2 = wrapper3的内存地址
        def wrapper2(*args,**kwargs):
            print('正在运行======>deco2.wrapper2')
            res2 = func2(*args,**kwargs)    # func2是wrapper3
            return res2
        return wrapper2
    
    def deco3(x):
        def outter3(func3): #func3 = 被装饰对象index的内存地址
            def wrapper3(*args,**kwargs):
                print('正在运行======>deco2.wrapper3')
                res3 = func3(*args,**kwargs)    # func3是index
                return res3
            return wrapper3
        return outter3
    
    
    # 加载顺序:自下而上(了解)
    @deco1          # deco1(wrapper2的内存地址)                  ===> index = wrapper1的内存地址
    @deco2          # deco2(wrapper3的内存地址)                  ===> index = wrapper2的内存地址
    @deco3(111)     # ===> @outter3 ===> index = outter3(index) ===> index = wrapper3的内存地址
    def index(x,y):
        print('from index %s:%s'%(x,y))
    
    
    
    index(1,2)
    
    # 执行顺序:自上而下 即:wrapper1 ==> wrapper2 ==> wrapper3
    # index(1,2)    # wrapper1(1,2)
    
  • 相关阅读:
    Shiro
    Python活力练习Day11
    Python活力练习Day10
    Python活力练习Day9
    数据框DataFrame和列表List相互转换
    Python活力练习Day8
    Python中绘制箭头
    Python活力练习Day7
    Python活力练习Day6
    Python活力练习Day5
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/12564486.html
Copyright © 2011-2022 走看看