Найти в Дзене

Генераторы и итераторы в Python: как экономить память и писать эффективный код

Привет! Сегодня разберем генераторы и итераторы — мощные инструменты, которые помогают писать эффективный код, экономя память. Если ты работаешь с большими объемами данных, эта тема станет твоим секретным оружием! 1. Итераторы в Python: что это такое?
Итератор — это объект, по которому можно перебирать (итерировать) данные.
Примеры итерабельных объектов:
- list, tuple, set, dict, str
- файлы
- объекты, реализующие __iter__() и __next__() Простейший пример итерации — цикл for: Но что происходит "под капотом"? Python превращает список в итератор с помощью iter() и перебирает его через next(): Когда элементы заканчиваются, выбрасывается StopIteration. Создаем свой итератор Чтобы сделать объект итератором, нужно добавить два метода: - __iter__() — возвращает сам объект
- __next__() — возвращает следующий элемент Итератор сам запоминает, где остановился! 2. Генераторы: ленивые итераторы Генератор — это функция, которая запоминает свое состояние и возвращает значения по одному с

Привет! Сегодня разберем генераторы и итераторы — мощные инструменты, которые помогают писать эффективный код, экономя память. Если ты работаешь с большими объемами данных, эта тема станет твоим секретным оружием!

1. Итераторы в Python: что это такое?
Итератор
— это объект, по которому можно перебирать (итерировать) данные.

Примеры итерабельных объектов:
- list, tuple, set, dict, str
- файлы
- объекты, реализующие __iter__() и __next__()

Простейший пример итерации — цикл for:

-2

Но что происходит "под капотом"?

Python превращает список в итератор с помощью iter() и перебирает его через next():

-3

Когда элементы заканчиваются, выбрасывается StopIteration.

Создаем свой итератор

Чтобы сделать объект итератором, нужно добавить два метода:

- __iter__() — возвращает сам объект
- __next__() — возвращает следующий элемент

-4

Вывод:
Вывод:

Итератор сам запоминает, где остановился!

2. Генераторы: ленивые итераторы

Генератор — это функция, которая запоминает свое состояние и возвращает значения по одному с помощью yield.



Простой пример генератора:

-6

Как это работает?

- yield заменяет return, но не завершает функцию.
- При каждом next() выполнение продолжается с места остановки.

Генератор вместо списка
Допустим, нам нужно создать
миллион чисел.

Плохой вариант (занимает память):
Плохой вариант (занимает память):
Хороший вариант (экономит память):
Хороший вариант (экономит память):

Теперь numbers не занимает память, пока не начнем извлекать элементы!

Пример: бесконечный генератор

Можно создать бесконечную последовательность без перегрузки памяти!
Можно создать бесконечную последовательность без перегрузки памяти!

3. Генераторные выражения (Generator Expressions)
Генератор можно записать в одну строку, как list comprehension:

Это почти как список, но не занимает память!
Это почти как список, но не занимает память!

Заключение
Итераторы позволяют перебирать данные шаг за шагом.
Генераторы — это "ленивые" итераторы, которые экономят память.
yield позволяет приостанавливать выполнение и возвращать значения.


Используешь ли ты генераторы? Напиши в комментариях!