13 votes

L'appel à list() vide mon objet itérable ?

a = range(1, 3)
a = iter(a)
list(a)
a = list(a)

a s'évalue à [ ] .

a = range(1, 3)
a = iter(a)
a = list(a)

a s'évalue à [1, 2] .

Le premier résultat est inattendu pour moi. Quelle est la sémantique qui se joue ici ?

2voto

Levit Points 760

iter() renvoie une itération tor et en appelant list() une deuxième fois, il renvoie une séquence vide.

>>> a = iter(range(1,3))
>>> list(a)
[1, 2]
>>> list(a)
[]

Docs sur itérable :

Lorsqu'un objet itérable est transmis comme argument à la fonction intégrée iter(), celle-ci renvoie un itérateur pour l'objet. Cet itérateur permet de passer une seule fois sur l'ensemble des valeurs.

Docs sur itérateur :

Un objet conteneur (tel qu'une liste) produit un nouvel itérateur chaque fois que vous le passez à la fonction iter() ou que vous l'utilisez dans une boucle for. Tenter de le faire avec un itérateur renverra simplement le même objet itérateur épuisé utilisé lors de la précédente passe d'itération, en le faisant apparaître comme un récipient vide .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X