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

Python高阶函数composer中使用func变量引发RecursionError的原因

递归错误原因:变量遮蔽与Lambda延迟绑定的坑

你遇到的RecursionError根源是变量名冲突+Lambda的延迟绑定特性,下面拆解清楚:

正常代码为什么没问题

h = lambda x: func(g(x))
return composer(h)

这里的h是func_adder内部的局部变量,Lambda里的func引用的是外层composer函数的参数(也就是之前积累的组合函数)。当把h传给新的composer时,这个Lambda调用时会正确找到外层的func,执行func(g(x)),逻辑完全正常。

出错代码的问题所在

func = lambda x: func(g(x))
return composer(func)

这里有两个关键问题:

  1. 变量遮蔽:你在func_adder内部给func赋值,这会让func变成func_adder的局部变量,不再指向外层composer的参数func。
  2. Lambda延迟绑定:Lambda里的变量不是定义时绑定的,而是调用时才去查找。当这个Lambda被调用(比如执行f1(3))时,它会在当前作用域找func——而此时的func就是这个Lambda自己!

于是调用时就会变成:Lambda调用func(g(x)),而func就是它自己,无限递归下去,直到触发栈溢出的RecursionError。

举个具体场景:当你调用func_adder(add_one)后,返回的新f1就是这个有问题的Lambda。执行f1(3)时,Lambda尝试计算func(add_one(3)),这里的func就是Lambda本身,于是又调用自己,循环往复直到报错。

而用h作为变量名时,不会和外层的func参数冲突,Lambda里的func始终指向外层的组合函数,自然不会出现递归问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:53:28