【问题标题】:why i cant printout the output of decorators?为什么我不能打印装饰器的输出?
【发布时间】:2019-04-16 19:06:14
【问题描述】:

这是一个关于装饰器的简单练习,但我不明白为什么在这种情况下我不能打印出函数输出,其中这两行代码分别写在最后 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()

【问题讨论】:

    标签: python decorator


    【解决方案1】:

    f1 是一个函数,它返回一个函数 f2,并传递一个函数 f,该函数在函数 f2 中调用。当您分配x=f1(f3) 时,您调用函数f1,它返回一个分配给变量x 的函数f2。然后当您调用x() 时,x 被分配了函数f2,该函数被调用,然后又调用f3,它作为变量f 传递给f1

    如果您调用x=f1,则将函数f1 分配给变量x。如果随后调用x(f3),则调用函数f1 并将f3 作为参数f 传递。 f1 返回一个从未调用过的函数 f2。如果您将返回值分配给新变量 y y=x(f3),然后调用 y(),则变量 y 现在被分配了函数 f2,当正确调用该函数时会打印输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 2021-05-10
      相关资源
      最近更新 更多