运行tmp()的结果是什么,为什么?

时间:2018-12-01 02:51:49

标签: python-3.x properties decorator

我认为tmp()与f2()相同。但是我得到2个不同的结果。

def w1(func):
    def inner():
        print("Verifying ......")
        return func()
    return inner

@w1
def f2():
   print('f2')

f2()
print("Equivalently:") 
tmp = w1(f2)
tmp()

1 个答案:

答案 0 :(得分:3)

tmp()f()的答案是不同的,因为当我们分配tmp=w1(f2)时,tmp现在指向inner()内部函数。请记住,由于执行了inner,因此在调用w1(f2)时将"Verifying ......"作为函数返回。并且,当您调用tmp()时,它将再次使用inner()执行f2()。这就是tmp()f()不同的原因。