当一个函数被多个装饰器装饰时,会从离函数最近的装饰器开始对函数进行装饰,离函数最远的装饰器最后装饰,越近的装饰器会在最终的函数的内层,越远的越会在函数的外层,所以最外层装饰器中的代码最先执行,最内层的装饰器的代码最后执行。
#!/usr/bin/env python3
def dec1(f):
print("dec1, before")
def dec():
print("dec1")
f()
return dec
def dec2(f):
print("dec2, before")
def dec():
print("dec2")
f()
return dec
def dec3(f):
print("dec3, before")
def dec():
print("dec3")
f()
return dec
@dec3
@dec1
@dec2
def printf():
print("real function")
printf()
这段代码将会输出
dec2, before
dec1, before
dec3, before
dec3
dec1
dec2
real function