繁体   English   中英

python lambda:比较超过最大递归深度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM