Il suffit d'apprendre que l'objet renvoyé de mappe () code> ne contient pas une fois qu'il a été utilisé dans une expression
dans code> ou il a été converti en liste. Qu'est-ce qui cause
B code> pour être vidé à la fin? p>
>>> a = [1, 2, 3]
>>> b = map(lambda x: x, a)
>>> b
<map object at 0x104d8ccc0>
>>> list(b)
[1, 2, 3]
>>> list(b)
[]
3 Réponses :
Chaque fois que vous appelez [1, 2, 3]
Imprimer (* b)
1 2 3
J'espère que cela a aidé. P>
blockQuote>
blockQuote>
blockQuote>
EDIT: corrigé mon erreur. P> list (b) code> Vous utilisez l'itérateur dedans, puis effacez la variable
B code> si vous souhaitez stocker
B code > en tant que liste
code> utilisation
a = [1, 2, 3]
B = Liste (carte (Lambda x: x, a))
Imprimer (B) P>
Calling Liste (b) code> n'attribue à rien.
Carte code> sortira un itérateur qui applique une fonction (
lambda x: x code>) sur certains itérateurs (
a code>). En conséquence,
B code> est un itérateur. Lorsque vous appelez
list (b) code> pour la première fois, l'itérateur
B code> est appelé plusieurs fois jusqu'à ce qu'il atteigne sa fin. Ensuite,
B code> est un itérateur qui n'a pas d'objet à produire. C'est pourquoi lorsque vous appelez
list (b) code> pour la deuxième fois, il génère une liste vide. P>
D'ACCORD. C'est itérateur code> non démontable que je m'attendais. Bien que cela ne soit pas sûr de son idée de design, c'est tout comme c'est le cas. Merci.
the Documentation pour La deuxième exécution de la liste Carte Code> Spécifie qu'il renvoie un "itérateur", pas un "itérateur". Python définit un itérateur à boucle exactement une fois sans répétition ; Une fois que la fin est atteinte, il ne retournera jamais un autre article. P>
(B) code> tente de créer une liste d'un itérateur déjà à la fin, il ne renvoie donc aucun élément et une liste vide est construite. P>
Ma faute. Merci pour l'inglightenment. BTW, n'est-ce pas plus naturel
mappe code> renvoyant la même collection (type)? Y a-t-il un mérite en plus de gagner un gain dans la performance de l'itération qui lui est immédiatement?