在装饰器链中,我们传递给装饰器的函数是否被执行了两次?

In decorator chaining did the function we pass to the decorator get executed twice?

def pass_through1(func):
    def inner1(*args):
        test_logs.append("pt1")
        return func(*args)
    return inner1

def pass_through2(func):
    def inner2(*args):
        test_logs.append("pt2")
        return func(*args)
    return inner2

@pass_through1
@pass_through2
def increment(num):
    return num+1

test_logs=[]
increment(10) //gives me the answer as 11
test_logs=['pt1','pt2'] //now test_log contains after the calling the increment function 

现在我怀疑增量函数是否执行了两次?当我们将它传递给两个装饰器时。

您没有将 increment 传递给两个装饰器;您将 increment 传递给装饰器 pass_through2,而这个 returns 一个名为 inner2 的函数被传递给另一个装饰器 pass_through1。该装饰器 returns 一个名为 inner1 的函数最终绑定到名称 increment.

所以当你调用 increment 时,它实际上调用了 inner1,然后调用了 inner2,它调用了原始的 increment 函数 - 一次 - 并且每个 inner1inner2 记录一次。