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
Таким образом, итератор — это объект, который можно использовать для последовательного получения элементов, а итерируемый объект — это контейнер, из которого можно получить итератор.