叠加装饰器

当一个函数叠加了多个装饰器后,程序会如何运行呢?

叠加装饰器:
    在同一个被装饰对象中,添加多个装饰器,并执行。
    @装饰1
    @装饰2
    @装饰3
    def 被装饰对象():
        pass

    注意: 装饰器在调用被装饰对象时才会执行添加的功能。

装饰的顺序:由下到上(被包裹)

执行的顺序:由上倒下(贯穿)

def wrapper1(func):
    def inner1(*args, **kwargs):
        print('我是inner1')
        res = func(*args, **kwargs)
        print('我是inner111111111111')
        return res

    return inner1


def wrapper2(func):
    def inner2(*args, **kwargs):
        print('我是inner2')
        res = func(*args, **kwargs)
        print('我是inner2222222')
        return res

    return inner2


@wrapper2
@wrapper1
def func1():
    print('我是func1!!!!!!!!!1')


func1()

输出为:

我是inner2
我是inner1
我是func1!!!!!!!!!1
我是inner111111111111
我是inner2222222
12-30 07:32