def deco1(func1): # func1 = wrapper2的内存地址
def wrapper1(*args, **kwargs):
print('正在运行===>deco1.wrapper1')
res1 = func1(*args, **kwargs)
return res1
return wrapper1
def deco2(func2): # func2 = wrapper3的内存地址
def wrapper2(*args, **kwargs):
print('正在运行===>deco2.wrapper2')
res2 = func2(*args, **kwargs)
return res2
return wrapper2
def deco3(x):
def outter(func3): # func3=被装饰对象index函数的内存地址
def wrapper3(*args, **kwargs):
print('正在运行===>deco3.outter.wrapper3')
res3 = func3(*args, **kwargs)
return res3
return wrapper3
return outter
# 加载顺序自下而上
@deco1 # index=deco1(wrapper2)-->index=wrapper1的内存地址
@deco2 # index=deco2(wrapper3)-->index=wrapper2的内存地址
@deco3(111) # @outter-->index=outter(index)-->index=wrapper3
Python-2.14 多个装饰器的加载、执行顺序
最新推荐文章于 2022-07-10 17:28:21 发布
本文详细探讨了Python中多个装饰器的加载和执行顺序,通过实例解析了装饰器如何影响函数调用的过程,对于理解Python装饰器的深层次工作原理至关重要。
摘要由CSDN通过智能技术生成