为什么我不能打印出装饰器的输出?

时间:2019-04-16 19:06:14

标签: python decorator

这是一个关于装饰器的简单练习,但是我不明白为什么在这两行代码分别写在末尾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()

1 个答案:

答案 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,该函数在正确调用时将打印输出。