这是一个关于装饰器的简单练习,但是我不明白为什么在这两行代码分别写在末尾x = f1-x(f3)的情况下,我无法打印出函数输出,但是当它执行时像这样写x = f1(f3)-x()
def f1(f):
def f2():
print (f'this is before the function call')
f()
print (f'this is after the function call')
return f2
def f3():
print('this is f3')
x=f1 |the other scenario| x=f1(f3)
x(f3) |the other scenario| x()
答案 0 :(得分:0)
f1
是一个返回函数f2
并传递给函数f
的函数,该函数在函数f2
中被调用。分配x=f1(f3)
时,将调用函数f1
,该函数将返回分配给变量f2
的函数x
。然后,当您调用x()
时,x被分配了函数f2
,该函数被调用,并依次调用f3
,该变量作为变量f
传递给f1
。
如果调用x=f1
,则将函数f1
分配给变量x
。如果随后调用x(f3)
,则调用函数f1
,并将f3
作为参数f
传递。 f1
返回一个函数f2
,该函数从不调用。如果您将返回值分配给新变量y y=x(f3)
然后调用y()
,则变量y
现在被分配了函数f2
,该函数在正确调用时将打印输出。