python多个装饰器的先后顺序

当一个函数被多个装饰器装饰时,会从离函数最近的装饰器开始对函数进行装饰,离函数最远的装饰器最后装饰,越近的装饰器会在最终的函数的内层,越远的越会在函数的外层,所以最外层装饰器中的代码最先执行,最内层的装饰器的代码最后执行。

#!/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

发表评论

电子邮件地址不会被公开。 必填项已用*标注