lambda的意外结果

时间:2015-10-28 03:32:47

标签: python python-3.x filter lambda

我执行了以下操作:

filter(lambda x: x%2 , range(10))
sum(filter(lambda x: x%2 , range(10)))
abc = filter(lambda x: x%2 , range(10))

sum(abc)    # => 25
sum(abc)    # => 0

为什么?

1 个答案:

答案 0 :(得分:2)

我认为您使用的是Python 3.x.在Python 3.x中,filter返回一个可迭代的,而不是一个列表。

因此,一旦您第一次使用filter迭代sumfilter迭代就会耗尽。下次,当您执行相同操作时,filter已经用尽(它没有更多元素)。这就是为什么你得到默认的返回值0。

您可以确认相同的内容,例如

>>> abc = filter(lambda x: x%2 , range(10))
>>> list(abc)
[1, 3, 5, 7, 9]
>>> list(abc)
[]