Что такое итератор
Итератор (iterator) – это объект, который представляет поток данных. Повторяемый вызов метода __next__()
(next()
в Python 2) итератора или передача его встроенной функции next()
возвращает последующие элементы потока.
Если больше не осталось данных, выбрасывается исключение StopIteration
. После этого итератор исчерпан и любые последующие вызовы его метода __next__()
снова генерируют исключение StopIteration
.
Итераторы обязаны иметь метод __iter__
, который возвращает сам объект итератора, так что любой итератор также является итерабельным объектом и может быть использован почти везде, где принимаются итерабельные объекты.
Подробнее:
Итераторы представлены абстрактным классом collections.abc.Iterator
:
class Iterator(Iterable):
__slots__ = ()
@abstractmethod
def __next__(self):
'Return the next item from the iterator. When exhausted, raise StopIteration'
raise StopIteration
def __iter__(self):
return self
@classmethod
def __subclasshook__(cls, C):
if cls is Iterator:
return _check_methods(C, '__iter__', '__next__')
return NotImplemented
__next__
Возвращает следующий доступный элемент и вызывает исключение StopIteration
, когда элементов не осталось. __iter__
Возвращает self
. Это позволяет использовать итератор там, где ожидается итерируемый объект, например for
. __subclasshook__
Проверяет наличие у класса метода __iter__
и __next__
Oct. 10, 2023, Источник
Это объект, который поддерживает функцию next() и помнит о том какой элемент будет браться следующим
- Это объект, который возвращает свои элементы по одному за раз.
- Любой объект, у которого есть метод
__next__
. Этот метод возвращает следующий элемент, если он есть, или возвращает исключение StopIteration, когда элементы закончились. - Кроме того, итератор запоминает, на каком элементе он остановился в последнюю итерацию.
- В Python у каждого итератора присутствует метод
__iter__
- то есть, любой итератор является итерируемым объектом. Этот метод просто возвращает сам итератор
Протокол итератора
- Чтобы получить итератор мы должны передать функции
iter
итерируемый объект. - Далее мы передаём итератор функции
next
. - Когда элементы в итераторе закончились, порождается исключение
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
Пример создания итератора из списка
- После того, как элементы закончились, возвращается исключение StopIteration.
- Итератор не может быть использован дважды. Для того, чтобы итератор снова начал возвращать элементы, его надо заново создать.
Аналогичные действия выполняются, когда цикл for проходится по списку, функция next() вызывается неявно:
for item in numbers:
print(item)
- Генераторы — это тоже итераторы.
- Многие встроенные функции является итераторами, например
zip
,open
Плюсы итераторов:
- Итераторы работают "лениво" (en. lazy). А это значит, что они не выполняют какой-либо работы, до тех пор, пока мы их об этом не попросим.
- Таким образом, мы можем оптимизировать потребление ресурсов ОЗУ и CPU, а так же создавать бесконечные последовательности.
Oct. 10, 2023, Источник
Примеры ответов:
- Junior Python Developer: полный разб…
- Техническое собеседование на позицию…
- Tech Interview Fest | Моковое собесе…
- Собеседование Trainee Python Develop…
- Собеседование Python. Разбор вопросов
- Собеседование Python 2023. Разбор ба…
- Моковое собеседование на позицию Dja…
- Собеседование Python developer на 30…
- luchanos | Balabot IT LIVE | Собесед…