def out1(func1): #7.func1=in2的内存地址,就是in2 print('out1') def in1(): #8.调用函数index() 因为函数在in1里,所以首先运行in1, print('in1') res1 = func1() #9.运行到这因为func1=in2,此时就去调用in2了 print('in11') #17.in2调用结束,该层继续执行至结束,程序运行完毕 return res1 return in1 def out2(func2): #5.func2=in3的内存地址 其实就是in3 print('out2') def in2(): #10.in1调用in2 print('in2') res2=func2() #11.运行到这一步因为要运行func2(),但func2是in3,所以调用in3 print('in22') #16.in3调用结束,该层继续执行至结束 return res2 return in2 def out3(func3): #3.func3=index的内存地址,就是最原始的index print('out3') def in3(): #12.程序开始调用in3 开始运行 print('in3') res3=func3() #2.func3=index 13.好了,到了我们的目标了此时开始运行index,接着往下 print('in33') #14.打印 return res3 #15.此时程序返回结束 return in3 @out1 #6.out1=out1(in2) out1同样装饰的就是in2了 并且运行结果为in1,所以此时index被传递给了in1 @out2 #4.out2=out2(in3) out2会向下面@out3也就就是in3要函数 此时in3被装饰, # 返回结果为in2,此时index被传递给in2 改行代码运行结果其实就是函数in2 @out3 #1.out3=out3(index) out3运行结果返回值为in3,此时index被in3带走 ##所以在函数的加载阶段就是自下至上 def index():#程序在13步运行完毕 print('叠加装饰器又怎么样?') #程序开始打印至结束 index()
有错误望各路大神指正谢谢!