2011-07-15 4 views
7

Quelqu'un pourrait-il m'aider à comprendre ce qui se passe dans le code Python suivant (python 3.2)? Je suis vraiment désemparé ici.python - même instruction, résultat différent

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 ? 

Merci.

Répondre

14

map() dans Python 3.x renvoie un itérateur, pas une liste. En le mettant à sum() la première fois le consomme, ne laissant rien pour la deuxième fois.

+2

Pour ajouter à cette réponse: Si vous souhaitez conserver les résultats sous forme de liste, faites 'r = list (map (...))' à la place. – kindall

+2

@kindall effectivement, une compréhension de la liste serait probablement plus propre –

+0

C'est certainement vrai. Bien sûr, il aurait été plus propre à utiliser en premier lieu. :-) – kindall

Questions connexes