Итераторы в Python — это ключевой элемент, который позволяет пройтись по элементам коллекции (списка, кортежа, словаря и т.д.) без необходимости использования индексов или циклов. Впрочем, иногда возникает необходимость создать свой собственный итератор. Например, если нужно перебирать элементы в определенном, нестандартном порядке или с определенными дополнительными действиями при каждом переходе к следующему элементу.
Рассмотрим, как создать базовый итератор в Python на примере итератора, который проходит по всем четным числам в заданном диапазоне.
class EvenNumbers: def __init__(self, max): self.max = max self.num = 0 def __iter__(self): return self def __next__(self): if self.num >= self.max: raise StopIteration else: self.num += 2 return self.num - 2
В этом коде создается класс EvenNumbers
, который представляет собой итератор. Этот итератор начинает с нуля и продвигается через все четные числа, пока не достигнет заданного максимума.
В этом классе есть три метода:
__init__
— инициализирует итератор, устанавливая максимальное значение и начальное число;__iter__
— возвращает итератор. В данном случае, это сам объект;__next__
— возвращает следующее значение в последовательности. Если итератор достигнет максимального значения, он вызовет исключениеStopIteration
, что сигнализирует о завершении итерации.
Теперь этот итератор можно использовать как любой другой итератор в Python:
for i in EvenNumbers(10): print(i)
На выходе получим:
0 2 4 6 8
Таким образом, создание собственного итератора в Python — это весьма прямолинейный процесс. Важно помнить о необходимости реализовать методы __iter__
и __next__
, а также об обработке исключения StopIteration
.
Добавить комментарий