装饰器可以在不改变源函数的基础上增加函数功能,那么如果一个函数由多个装饰器的装饰,执行的是顺序应该是怎样的??这个问题一直困扰了我很久,终于。。。
下面我们先用一个简单的例子验证一下
def one(func):
print('----1----')
def two():
print('----2----')
func()
return two
def a(func):
print('----a----')
def b():
print('----b----')
func()
return b
@one
@a
def demo():
print('----3----')
demo()
执行结果:
下面用一个图来说明执行的过程:
注意:
当一个被装饰的对象同时叠加多个装饰器时,装饰器的加载顺序是,自下从上,装饰器内wrapper函数的执行顺序是,自上而下。
现在,你明白了吗???