在装饰器链中,我们传递给装饰器的函数是否被执行了两次?
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
函数 - 一次 - 并且每个 inner1
和 inner2
记录一次。
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
函数 - 一次 - 并且每个 inner1
和 inner2
记录一次。