python的装饰器顺序

一曲冷凌霜 提交于 2020-01-14 18:06:48

装饰顺序:组装装饰器时,就近原则,从下往上装饰
执行顺序:就远原则,从上往下调用

先进入离test函数最近的装饰器,由于装饰器中返回的是函数的函数名引用,并非真正的调用函数;
到inner2后,func会真正的执行函数,会调用inner1;
到inner1中,func会调用test函数;
再从各个函数出来

def wrapper_out1(func):
    # print('--out11---')
    def inner1(*args,**kwargs):
        print('----in11----')
        res = func(*args,**kwargs)
        print('----in12-----')
        return res
    # print('---out---12')
    return inner1

def wrapper_out2(func):
    # print('--out21---')
    def inner2(*args,**kwargs):
        print('----in21----')
        res = func(*args,**kwargs)
        print('----in22-----')
        return res
    # print('---out---22')
    return inner2

@wrapper_out2
@wrapper_out1
def test(): #wrapper_out2(wrapper_out1(test)) === wrapper_out2(inner1)
    print('---test---')
    return 1 * 2

test()
print(test)

在这里插入图片描述

结果
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!