Тесты Пообщаться с GPT Протестировать код
Программирование Аналитика Дизайн Маркетинг Управление проектами
03 Авг 2023
2 мин
627

Создание базового итератора в Python

Пройдите тест, узнайте какой профессии подходите

Итераторы в Python — это ключевой элемент, который позволяет пройтись по элементам коллекции (списка, кортежа, словаря и т.д.) без необходимости использования

Итераторы в 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.

Добавить комментарий