2011-07-15 35 views
7

有人能帮我理解下面的Python代码(python 3.2)中发生了什么吗?我在这里真的很无能。python - 同样的指令,不同的结果

import sys 
u = sys.stdin.readline() 
    # try entering the string "1 2 3" 
r = map(lambda t: int(t.strip()),u.split()) 
print(sum(r)) # prints 6 
print(sum(r)) # prints 0 ? 

谢谢。

回答

14

map()在Python 3.x中返回一个迭代器,而不是一个列表。通过sum()第一次消耗它,第二次没有留下任何东西。

+2

要添加到此答案:如果您想保留结果作为列表,请执行'r = list(map(...))'。 – kindall

+2

@ kindall实际上,列表理解可能会更清晰 –

+0

这当然是对的。当然,首先使用它会更清洁。 :-) – kindall