tldr; да
Итератор по сути является производителем значений, который выдает последовательные значения из связанного с ним итеративного объекта. Встроенная функция next()
используется для получения следующего значения из итератора. Вот пример использования того же списка, что и выше:
>>> l = ['Sarah', 'Roark']
>>> itr = iter(l)
>>> itr
<list_iterator object at 0x100ba8950>
>>> next(itr)
'Sarah'
>>> next(itr)
'Roark'
>>> next(itr)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
В этом примере l
- это повторяемый список, а itr
- связанный итератор, полученный с помощью iter (). Каждый вызов next(itr)
получает следующее значение из itr
.
Обратите внимание, как итератор сохраняет свое состояние внутри. Он знает, какие значения уже были получены, поэтому, когда вы вызываете next()
, он знает, какое значение возвращать следующим.
Если все значения от итератора уже были возвращены, возникает следующий вызов next()
a StopIteration
исключение. Любые дальнейшие попытки получить значения от итератора потерпят неудачу.
Мы можем получить значения от итератора только в одном направлении. go назад мы не можем. Функция prev()
отсутствует. Но мы можем определить два независимых итератора для одного итерируемого объекта:
>>> l
['Sarah', 'Roark', 30]
>>> itr1 = iter(l)
>>> itr2 = iter(l)
>>> next(itr1)
'Sarah'
>>> next(itr1)
'Roark'
>>> next(itr1)
30
>>> next(itr2)
'Sarah'