我尝试在lambda函数中循环,我的代码是:
zxm=lambda k:[k+x for x in range(k)]
print(zxm(5))
,我得到的输出是我输入的内容:
[5,6,7,8,9]
然而,我的预期输出是我想要的所有5个数字的总和:
35
我们如何在lambda中循环?另外,是否有机会递归?
答案 0 :(得分:7)
这不是一个循环本身,它是一个列表理解。例如,您可以使用sum
来获得总和。
In [7]: zxm = lambda k: sum(k+x for x in range(k))
In [8]: zxm(5)
Out[8]: 35
请注意,for
中禁止使用lambda
等语句;只允许使用表达式,因此虽然您可以使用列表推导,但您无法编写传统的for
循环。
答案 1 :(得分:1)
首先,python中有sum
方法。你可以sum(zxm(5))
。递归lambdas确实存在(参见:Y Combinator),这在python中是可能的(参见Can a lambda function call itself recursively in Python?),但是,这种实用性并不是特别强。 Lambdas可以像你在这里一样循环(在列表中)。问题不在于zxm
是一个lambda,而是它的定义方式。您可以通过将其定义为zxm
来获得zxm=lambda k: sum([k+x for x in range(k)])
中的总和。