小菜鸟的python进阶之路 ------- 多个装饰器的执行顺序

装饰器可以在不改变源函数的基础上增加函数功能,那么如果一个函数由多个装饰器的装饰,执行的是顺序应该是怎样的??这个问题一直困扰了我很久,终于。。。

下面我们先用一个简单的例子验证一下

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()

执行结果:

小菜鸟的python进阶之路 ------- 多个装饰器的执行顺序_第1张图片

下面用一个图来说明执行的过程:

小菜鸟的python进阶之路 ------- 多个装饰器的执行顺序_第2张图片

注意:

当一个被装饰的对象同时叠加多个装饰器时,装饰器的加载顺序是,自下从上,装饰器内wrapper函数的执行顺序是,自上而下。

现在,你明白了吗???

你可能感兴趣的:(小菜鸟的python进阶之路)