Sobes.tech
Middle
24

Что такое итератор и итерируемый объект (iterable)? Какие методы они должны реализовывать? Как работает for loop под капотом?

Companies where asked
Лига Цифровой ЭкономикиЛига Цифровой Экономики

Answer from AI

sobes.tech AI

Итератор — это объект, который реализует метод __next__(), возвращающий следующий элемент последовательности, и метод __iter__(), который возвращает сам итератор. Итерируемый объект (iterable) — это объект, который реализует метод __iter__(), возвращающий итератор.

То есть:

  • iterable должен иметь метод __iter__(), который возвращает итератор;
  • итератор должен иметь методы __iter__() (возвращает себя) и __next__() (возвращает следующий элемент или вызывает StopIteration).

Цикл for под капотом вызывает iter() на итерируемом объекте, чтобы получить итератор, затем в цикле вызывает next() на итераторе, пока не возникнет исключение StopIteration.

Пример:

my_list = [1, 2, 3]
iterator = iter(my_list)  # вызывает my_list.__iter__()
print(next(iterator))  # 1
print(next(iterator))  # 2
print(next(iterator))  # 3
# next(iterator) вызовет StopIteration