![](/img/trans.png)
[英]RecursionError: maximum recursion depth exceeded in comparison Python
[英]python lambda : maximum recursion depth exceeded in comparison
我在 Python 中编写了以下代码:
func = lambda x : x * 2
func = lambda x : func(x)
func(6)
当我运行上面的代码时,我得到了
RecursionError:比较超过最大递归深度
我认为原因可能是:当它运行时,它看起来像这样:
func = lambda x : lambda x: lambda x: (bula bula ...)
但为什么不应该是这样的:
func = lambda x : lambda x : x * 2
还是有什么其他原因?
当您编写func = lambda x : func(x)
时,您将func
重新定义为那个 lambda,它只是重复调用自身,直到它在递归限制处触底。 考虑相同的功能版本:
def i_call_myself_forever(x):
return i_call_myself_forever(x)
你的 lambda 也在做同样的事情。
我认为您正在尝试做的是从第二个调用第一个func
定义。 既然如此,只要给他们不同的名字,你就会没事的。
此外,您没有正确理解func = lambda x : lambda x : x * 2
的含义。 发生的事情是顶级lambda
正在返回另一个lambda
,即lambda x : x * 2
。 第二级 lambda 使用相同的参数名称x
,因此从顶级lambda
中隐藏了x
。 你可以这样称呼它
func = lambda x : lambda x : x * 2
intermediate_func = func(5) # 5 is captured but never used
assert intermediate_func(6) == 12 # this is calling lambda x : x * 2
让我们也尝试一个功能版本尽可能清晰:
def i_return_a_function(x):
def im_an_inner_function(x):
# my x shadows i_return_a_function's x
return x * 2
return im_an_inner_function # notice how i_return_a_function's x is never used
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.