You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Lambda赋值引发RecursionError的原因咨询

问题分析:递归超限错误的原因

你的代码:

func = lambda x : x * 2
func = lambda x : func(x)
func(6)

运行后报错:

RecursionError: maximum recursion depth exceeded in comparison

你猜测的嵌套lambda情况不会发生,核心原因是Python中变量的引用是在函数调用时解析,而非定义时绑定。

拆解执行过程:

  • 第一行:func被赋值为第一个lambda函数(功能是返回输入值的2倍)。
  • 第二行:func被重新赋值为第二个lambda函数,这个函数的逻辑是调用func(x)。注意:此时这个lambda里的func并没有被固定为第一个lambda,它只是一个变量引用,指向当前func变量的最新值。
  • 第三行调用func(6)时,执行第二个lambda的逻辑:调用func(x)——而此时func就是这个lambda自己,于是就开始了无限递归,直到触发递归深度限制报错。

如果想要让第二个lambda引用第一个lambda,需要在定义时就把值绑定进去,比如用默认参数:

func = lambda x : x * 2
func = lambda x, f=func : f(x)
func(6)  # 输出12

这里默认参数f=func会在定义第二个lambda时就绑定当时的func值(也就是第一个lambda),调用时就不会递归了。

内容的提问来源于stack exchange,提问作者Deler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:36:24