Это объект, который поддерживает функцию next() и помнит о том какой элемент будет браться следующим

Протокол итератора

  1. Чтобы получить итератор мы должны передать функции iter итерируемый объект.
  2. Далее мы передаём итератор функции next.
  3. Когда элементы в итераторе закончились, порождается исключение StopIteration.
numbers = [1, 2, 3]
i = iter(numbers)

next(i) # 1
next(i) # 2
next(i) # 3

Traceback (most recent call last):
  File "main.py", line 8, in <module>
    print(next(i))
StopIteration

Аналогичные действия выполняются, когда цикл for проходится по списку, функция next() вызывается неявно:

for item in numbers:
   print(item)