Considérer:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Ainsi, l'avancement de l'itérateur est, comme prévu, géré par la mutation de ce même objet.
Cela étant le cas, je m'attendrais à:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
pour sauter tous les deux éléments: l'appel à next
devrait avancer l'itérateur une fois, puis l'appel implicite effectué par la boucle devrait l'avancer une deuxième fois - et le résultat de ce deuxième appel serait assigné à i
.
Ce n'est pas le cas. La boucle imprime tous les éléments de la liste, sans en sauter aucun.
Ma première pensée a été que cela pourrait se produire parce que la boucle fait appel iter
à ce qu'elle est passé, et cela pourrait donner un itérateur indépendant - ce n'est pas le cas, comme nous l'avons fait iter(a) is a
.
Alors, pourquoi ne next
semble pas faire avancer l'itérateur dans ce cas?