我执行了以下操作:
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
为什么?
答案 0 :(得分:2)
我认为您使用的是Python 3.x.在Python 3.x中,filter
返回一个可迭代的,而不是一个列表。
因此,一旦您第一次使用filter
迭代sum
,filter
迭代就会耗尽。下次,当您执行相同操作时,filter
已经用尽(它没有更多元素)。这就是为什么你得到默认的返回值0。
您可以确认相同的内容,例如
>>> abc = filter(lambda x: x%2 , range(10))
>>> list(abc)
[1, 3, 5, 7, 9]
>>> list(abc)
[]