-1
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 

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

4

1 回答 1

0

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

因此,当您调用 时increment,它确实调用inner1,然后调用inner2,调用原始increment函数 - 一次 - 并且每个函数inner1执行一次inner2日志记录。

于 2020-01-13T18:44:50.160 回答