python - 将函数重新定义为自身的一部分——为什么非法?

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/

相关文章:

java - 减去天数而不影响时间

sql - 将计数设置为变量

amazon-web-services - Github 工作流 CI/CD 失败

reactjs - 我想在按下 react esc 时关闭模态

c# - 从 C# 中的 JSON 字符串中获取特定值

xamarin - 无法再在模拟器或设备上调试

visual-studio-code - 2FA 与 VS 代码远程 SSH?

c++ - 默认参数与重载?

kubernetes - 为什么容器内存使用量在 cAdvisor 指标中翻倍?

python - 如何使用 PyAnsys 和 PyVista 创建共享拓扑