在python中,我们将一个函数赋给变量与直接调用函数有什么执行上的不同

Why is the difference in execution when we assign a function to variable and directly call function in python

Python壳

1
2
3
4
def outer():
    def inner(a):
        return a
    return inner

在这里,我第一次调用outer(5)时,它给了我错误的说法

1
2
3
Traceback (most recent call last):
  File"<stdin>", line 1, in <module>
TypeError: outer() takes 0 positional arguments but 1 was given

当我将该函数赋给变量并将参数传递给变量时,它只是返回一个没有错误的值,即

1
2
f=outer()
f(5)

它返回5


函数outer()不带参数。它定义一个局部函数inner(a),并返回对该函数的引用。这就是您上次尝试不产生错误的原因。通过写作

1
2
f = outer()
f(5)

您实际上是将定义的函数inner(a)分配给f,然后用参数5调用它。

我希望这更清楚。尽管如此,我还是不明白为什么您首先要用这种方式定义函数。


outer()返回函数inner(),因此通过将outer()设置为变量,可以将该变量设置为inner(),但通过将outer设置为变量,可以将该变量设置为函数outer()