# 叠加多个装饰器的加载、分析
def deco1(func1):
def wrapper1(*args, **kwargs):
print("print1")
res1 = func1(*args, **kwargs)
return res1
return wrapper1
def deco2(func2):
def wrapper2(*args, **kwargs):
print("print2")
res2 = func2(*args, **kwargs)
return res2
return wrapper2
def deco3(a):
def outter3(func3):
def wrapper3(*args, **kwargs):
print("print3", a)
res3 = func3(*args, **kwargs)
return res3
return wrapper3
return outter3
# 加载顺序自下而上
# 执行顺序自上而下
@deco1 # index=deco1(deco2,wrapper的内存地址)
@deco2 # deco2.wrapper的内存地址=deco2(deco3.wrapper的内存地址)
@deco3(111) # deco3.wrapper的内存地址=deco3(index)
def index(x, y):
print('from index %s %s' % (x, y))
index(1, 2)