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
相关产品推荐
相关产品推荐

