装饰顺序:组装装饰器时,就近原则,从下往上装饰
执行顺序:就远原则,从上往下调用
先进入离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)
结果
来源:CSDN
作者:一坨小红花
链接:https://blog.csdn.net/qq_45652989/article/details/103951607