Sobes.tech
Back to questions
Junior — Middle
72

Как отличить итератор от объекта, поддерживающего протокол итерации?

Answer from AI

sobes.tech AI

В Python итератор — это объект, который реализует метод __next__() и метод __iter__(), где __iter__() возвращает сам объект. Объект, поддерживающий протокол итерации (итерируемый объект), реализует только метод __iter__(), который возвращает итератор.

Проще говоря:

  • Итерируемый объект можно использовать в цикле for и получить из него итератор через iter(obj).
  • Итератор — это объект, у которого есть метод __next__(), возвращающий следующий элемент, и который сам является итерируемым (то есть iter(iterator) == iterator).

Пример:

lst = [1, 2, 3]  # итерируемый объект
it = iter(lst)    # итератор

print(hasattr(lst, '__iter__'))  # True
print(hasattr(lst, '__next__'))  # False

print(hasattr(it, '__iter__'))   # True
print(hasattr(it, '__next__'))   # True

print(next(it))  # 1

Таким образом, итератор — это объект, который можно использовать для последовательного получения элементов, а итерируемый объект — это контейнер, из которого можно получить итератор.