Rozważać:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Tak więc, postęp iteratora jest, zgodnie z oczekiwaniami, obsługiwany przez mutację tego samego obiektu.
W takim przypadku spodziewałbym się:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
pomijać co drugi element: wywołanie to next
powinno przesuwać iterator jeden raz, a następnie niejawne wywołanie wykonane przez pętlę powinno przesuwać go po raz drugi - a wynik tego drugiego wywołania zostałby przypisany i
.
Tak nie jest. Pętla wypisuje wszystkie pozycje z listy, bez pomijania żadnych.
Moją pierwszą myślą było to, że może się to zdarzyć, ponieważ pętla wywołuje iter
to, co zostało przekazane, a to może dać niezależny iterator - tak nie jest, jak mamy iter(a) is a
.
Dlaczego więc next
w tym przypadku nie wydaje się, aby przyspieszyć iterator?