Итераторы в Python являются одним из ключевых концептов, которые обеспечивают эффективную работу с последовательностями, такими как списки, кортежи, словари и множества. Благодаря итераторам, Python позволяет обходить эти структуры данных удобным и простым способом, используя циклы и специальные методы. В этой статье мы подробно рассмотрим, что такое итераторы, как они работают, и как их создавать и использовать.
Что такое итераторы?
Итератор — это объект, который реализует протокол итерации. В Python итератор является объектом, который возвращает свои элементы по одному с помощью метода next(). Важной особенностью итератора является то, что он запоминает свое текущее положение во время обхода последовательности.
Итератор имеет следующие ключевые свойства:
- Объект итератора имеет метод iter(), который возвращает сам объект.
- Метод next() используется для получения следующего элемента. Если элементы закончились, поднимается исключение StopIteration.
Итераторы и итерируемые объекты
Итератор следует отличать от итерируемого объекта.
- Итерируемый объект — это любой объект, из которого можно получить итератор, используя функцию iter(). Например, списки, кортежи, строки и словари являются итерируемыми.
- Итератор — это объект, который используется для обхода элементов. Он создается из итерируемого объекта с помощью функции iter().
Пример итерируемого объекта и итератора:
# Итерируемый объект
my_list = [1, 2, 3, 4]
# Создание итератора
my_iterator = iter(my_list)
# Использование метода __next__()
print(next(my_iterator)) # Выведет: 1
print(next(my_iterator)) # Выведет: 2
Как работает цикл for с итераторами
Цикл for в Python автоматически создает итератор из итерируемого объекта и вызывает метод next() для каждой итерации. Как только элементы заканчиваются, обрабатывается исключение StopIteration, и цикл завершается.
Пример:
my_list = [10, 20, 30]
for item in my_list:
print(item)
За кулисами этот код выполняет следующее:
- Вызывает iter(my_list) для создания итератора
- Вызывает next() на каждой итерации
- Завершает цикл, когда поднимается исключение StopIteration
Создание собственного итератора
В Python можно создавать собственные итераторы, определяя классы, которые реализуют методы iter() и next().
Пример:
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current < self.end:
self.current += 1
return self.current - 1
else:
raise StopIteration
# Использование собственного итератора
my_iter = MyIterator(1, 5)
for num in my_iter:
print(num)
Результат:
1
2
3
4
В этом примере мы создали итератор, который генерирует числа от start до end — 1.
Генераторы как итераторы
Генераторы — это особый тип итераторов, который создается с помощью функций с ключевым словом yield. Генераторы упрощают создание итераторов, поскольку не нужно определять методы iter() и next() вручную.
Пример генератора:
def my_generator():
for i in range(1, 5):
yield i
# Использование генератора
for value in my_generator():
print(value)
Результат:
1
2
3
4
Генераторы автоматически реализуют протокол итерации.
Использование итераторов в реальных задачах
1. Чтение больших файлов
Итераторы удобны для обработки больших файлов, поскольку они позволяют читать файл по строкам, не загружая весь файл в память.
with open('large_file.txt', 'r') as file:
for line in file:
print(line.strip())
2. Обработка потоков данных
Итераторы используются для обработки бесконечных потоков данных, например, при генерации чисел.
def infinite_numbers():
num = 0
while True:
yield num
num += 1
for number in infinite_numbers():
if number > 10:
break
print(number)
3. Оптимизация памяти
Итераторы полезны для работы с большими данными, поскольку они генерируют элементы по одному, а не хранят все данные в памяти.
Преимущества итераторов
- Эффективное использование памяти — итераторы не хранят все элементы в памяти, а генерируют их по одному
- Легкость использования — упрощают работу с последовательностями
- Возможность работы с бесконечными последовательностями
Заключение
Итераторы в Python являются мощным инструментом для работы с последовательностями. Они обеспечивают эффективный способ обхода данных, экономят память и делают код более элегантным. Благодаря итераторам Python предоставляет разработчикам гибкость в работе с потоками данных, большими файлами и другими сложными структурами.
Понимание итераторов является ключевым для эффективного программирования на Python, и их использование открывает множество возможностей для оптимизации кода.
Сколько зарабатывает рекрутёр в Украине? Читайте ещё одну статью.
Асинхронные итераторы и async for
Начиная с Python 3.5 в языке появилась поддержка асинхронного программирования, а в последующих версиях (3.10–3.12) работа с асинхронными итераторами стала еще стабильнее и быстрее. Асинхронные итераторы используются в ситуациях, когда получение следующего элемента требует ожидания — например, при работе с сетевыми запросами, API або асинхронными потоками данных.
Асинхронный итератор реализует методы __aiter__() и __anext__(), а для обхода используется конструкция async for. В отличие от обычного итератора, метод __anext__() возвращает awaitable-объект и может приостанавливать выполнение.
import asyncio
class AsyncCounter:
def __init__(self, limit):
self.limit = limit
self.current = 0
async def __aiter__(self):
return self
async def __anext__(self):
if self.current < self.limit:
await asyncio.sleep(0.5)
self.current += 1
return self.current
raise StopAsyncIteration
async def main():
async for number in AsyncCounter(3):
print(number)
asyncio.run(main())
Асинхронные итераторы активно используются в современных веб-фреймворках (FastAPI, aiohttp), при работе с потоковой обработкой данных и в микросервисной архитектуре. В 2026 году асинхронная обработка стала стандартом де-факто для высоконагруженных Python-приложений, особенно в сфере backend-разработки и data streaming.
Полезные встроенные инструменты для работы с итераторами
Python предоставляет богатый набор встроенных функций и модулей для эффективной работы с итераторами. Одним из наиболее мощных инструментов является модуль itertools, который позволяет создавать эффективные цепочки обработки данных без промежуточных списков.
import itertools
numbers = [1, 2, 3, 4]
# Бесконечный счетчик
counter = itertools.count(start=10, step=2)
# Комбинации
combinations = itertools.combinations(numbers, 2)
for combo in combinations:
print(combo)
Также часто используются функции map(), filter(), zip() и enumerate(), которые возвращают итераторы, а не списки (в Python 3). Это делает их особенно полезными при работе с большими объемами данных.
names = ["Alice", "Bob", "Charlie"]
for index, name in enumerate(names, start=1):
print(index, name)
Согласно исследованиям производительности Python-приложений, опубликованным в отчетах JetBrains Developer Ecosystem и Python Developers Survey (2024–2025), использование генераторов и итераторов вместо промежуточных списков позволяет сокращать потребление памяти на десятки процентов при обработке больших датасетов. Это особенно важно в сферах data science, машинного обучения и backend-разработки, где объем обрабатываемой информации постоянно растет.
Эффективное использование итераторов в сочетании с генераторами и инструментами стандартной библиотеки позволяет писать более чистый, масштабируемый и производительный код, отвечающий современным требованиям разработки.
Оновлено 12.03.2026

