python的装饰器顺序

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

先进入离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)

在这里插入图片描述

结果
在这里插入图片描述

发布了103 篇原创文章 · 获赞 1 · 访问量 948

猜你喜欢

转载自blog.csdn.net/qq_45652989/article/details/103951607