一、多个装饰器的执行顺序
前面我们说到了装饰其的用法,以及他的作用;可是在工作中我们经常能看到装饰器可能不止使用一次,在同一个函数下我们有可能加上好几个装饰器,那他们的运行机制:
例:
def decorator_a(func):
print('count 1')
def inner_a(*args, **kwargs):
print('count 2')
return func(*args, **kwargs)
return inner_a
def decorator_b(func):
print('count 3')
def inner_b(*args, **kwargs):
print('count 4')
return func(*args, **kwargs)
return inner_b
# 当有多个装饰器时, 从下到上调用装饰器;
@decorator_b # f = decorator_b(inner_a) # f = inner_b
@decorator_a # f = decorator_a(f) # f = inner_a
def f(x):
print('Get in f')
return x * 2
f(1) # inner_b(1)
我们看到了上面的结果,函数在调用装饰器时是自下向上的顺序