叠加多个装饰器
加载顺序
一、叠加多个装饰器的加载(了解)
加载顺序自下而上
#@deco1 #index = deco1(deco2.wrapper的内存地址)
#@deco2 #deco2.wrapper的内存地址=deco2(deco3.wrapper的内存地址)
#@deco3 #deco3.wrapper的内存地址=deco3(index)
def deco1(func1): #func1=wrapper2的内存地址
def wrapperr(*args,**kwargs):
print('正在运行==>deco.wrapper1')
res1=func1(*args,**kwargs)
print 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 wrapper(*args,**kwargs):
print('正在运行==>deco3.outter3.wrapper3')
res3=func3(*args,**kwargs)
return res3
return wrapper3
return outter3
#加载顺序自下而上(了解)
@deco1 #index = deco1(wrapper2的内存地址)==>index=wrapper1的内存地址
@deco2 #index=deco2(wrapper3的内存地址)==>index=wrapper2的内存地址
@deco3(111) #outter3==>index=outter3(index)==>index=wrapper3的内存地址
def index(x,y):
print('from index %s:%s' %(x,y))
print(index)
运行分析
执行顺序:自上而下的
def deco1(func1): #func1=wrapper2的内存地址
def wrapperr(*args,**kwargs):
print('正在运行==>deco.wrapper1')
res1=func1(*args,**kwargs)
print 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