def f(x):
return x
f = lambda : f(5)
f()
=> Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 4, in <lambda>
TypeError: <lambda>() takes 0 positional arguments but 1 was given
我可以直观地看出为什么这不起作用……这是一种循环引用。具体来说,它违反了 Python 中的什么规则?
最佳答案
好吧,您正在覆盖函数名称。在 lambda
行:
f = lambda : f(5)
它成为一个递归,它执行调用自身的 f(5)
。它没有一遍又一遍地调用它自己(递归)的唯一原因是因为你正在使用 lambda:
,它不带任何参数,所以如果你这样做:
f = lambda: f()
你会得到一个RecursionError
。
lambda
本质上是一个函数,lambda
可以翻译成:
def f():
return f()
https://stackoverflow.com/questions/69262042/