Рассмотрим:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Таким образом, продвижение итератора, как и ожидалось, обрабатывается путем изменения этого же объекта.
В этом случае я ожидал бы:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
чтобы пропустить каждый второй элемент: вызов next
должен продвигать итератор один раз, тогда неявный вызов, сделанный циклом, должен продвинуть его второй раз - и результат этого второго вызова будет назначен i
,
Это не так. Цикл печатает все элементы в списке, не пропуская их.
Моя первая мысль заключалась в том, что это может произойти, потому что цикл вызывает iter
в том, что он передается, и это может дать независимый итератор - это не так, поскольку у нас есть iter(a) is a
.
Итак, почему next
не появляется, чтобы продвигать итератор в этом случае?