在一个函数上运用多个装饰器时,装饰器函数从下往上依次执行。
比如:
def dec1(f):
print(f'装饰器1,装饰的函数名:{f.__name__}')
def inner1(a,/,*args,**kwargs):
print('in function inner1')
f(a,*args,**kwargs)
return inner1
def dec2(f):
print(f'装饰器2,装饰的函数名:{f.__qualname__}')
def inner2(a,/,*args,**kwargs):
print('in function inner2')
f(a,*args,**kwargs)
return inner2
@dec1
@dec2
def f(a):
print(f'in function f,a={a}')
f(9999)
会先用dec2装饰f,dec1装饰的是dec2(f)的返回值inner2函数,相当于调用:
f=dec1(dec2(f))
将输出: