def passer1(func):
    def wrapper1(*args, **kwargs):
        res = func()
        return res
    return wrapper1
def passer2(func):
    def wrapper2(*args, **kwargs):
        res = func()
        return res
    return wrapper2
def passer3(func):
    def wrapper3(*args, **kwargs):
        res = func()
        return res
    return wrapper3
@passer3  # 第三步加载 passer3,即((fff = wrapper1)= wrapper2)= wrapper3
@passer2  # 第二步加载 passer2,即(fff = wrapper1)= wrapper2
@passer1  # 第一步加载 passer1,即 fff = wrapper1
def fff():
    pass
fff()
# 执行顺序:执行 wrapper3(内部 wrapper2(内部 wrapper1(内部 fff)))

 

总结:叠加多个装饰的情况下

加载顺序:较原函数而言,自下而上,由近及远,也就是从内到外。

执行顺序:较原函数而言,自上而下,由远及近,就就是从外到内。

 

posted on 2020-01-03 14:01  焚音留香  阅读(119)  评论(0编辑  收藏  举报