Проверяет знание протокола итераторов в Python и их реализацию.
Для создания итератора нужно реализовать два метода:
__iter__() — возвращает сам объект итератора.
__next__() — возвращает следующее значение. Когда элементы закончились, вызывает исключение StopIteration.
Итератор — объект, который позволяет перебирать элементы коллекции по одному. Для его создания в Python используются магические методы:
__iter__
Должен вернуть сам объект итератора. Вызывается один раз в начале цикла for.
__next__
Возвращает следующий элемент. Если элементов нет, вызывает StopIteration, что сигнализирует о конце перебора.
Пример реализации:
class Counter:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self # Возвращаем сам итератор
def __next__(self):
if self.current >= self.end:
raise StopIteration # Элементы закончились
self.current += 1
return self.current - 1
# Использование
for num in Counter(1, 4):
print(num) # 1, 2, 3Как это работает в цикле for:
Вызывается __iter__() для получения итератора.
На каждой итерации вызывается __next__().
При StopIteration цикл прерывается.
Вывод:
Итераторы полезны для обработки больших данных (например, чтение файла построчно), так как не загружают всё в память сразу.