可以在lambda中完成循环吗?

时间:2016-12-29 20:53:39

标签: python loops lambda

我尝试在lambda函数中循环,我的代码是:

zxm=lambda k:[k+x for x in range(k)]
print(zxm(5))

,我得到的输出是我输入的内容:

[5,6,7,8,9]

然而,我的预期输出是我想要的所有5个数字的总和:

35

我们如何在lambda中循环?另外,是否有机会递归?

2 个答案:

答案 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)])中的总和。

相关问题