Найти в Дзене

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

Привет! Сегодня поговорим о генераторах — мощном инструменте в Python, который позволяет создавать элементы по мере необходимости и экономить память. 1. Что такое генератор?
Генератор — это особая функция, которая не возвращает сразу все значения, а генерирует их по одному с помощью yield. Пример: обычная функция vs генератор Как работает `yield`? В отличие от return, оператор yield сохраняет состояние функции. Вывод: 3. Генераторы против списков
Что лучше: список или генератор?
| Список | Генератор |
| Загружает всю память | Создает элементы по одному |
| Быстрый доступ к любому элементу | Можно итерироваться только один раз |
| Работает быстрее при маленьких объемах данных | Работает быстрее при больших данных | Пример: разница в памяти 4. Бесконечные последовательности с генераторами
Ты можешь создать бесконечный генератор! 5. Генераторы + `yield from` Если у нас есть вложенные генераторы, можно использовать yield from. Вывод: `yield from` передает управление другому генерат

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

1. Что такое генератор?

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

Пример: обычная функция vs генератор

Генератор не загружает память, а создает значения по запросу!
Генератор не загружает память, а создает значения по запросу!

Как работает `yield`?

В отличие от return, оператор yield сохраняет состояние функции.

-3

Вывод:

Функция запоминает, где остановилась, и продолжает с этого места!
Функция запоминает, где остановилась, и продолжает с этого места!

3. Генераторы против списков

Что лучше: список или генератор?
| Список | Генератор |
| Загружает всю память | Создает элементы
по одному |
| Быстрый доступ к любому элементу | Можно итерироваться только один раз |
| Работает быстрее при маленьких объемах данных | Работает быстрее при
больших данных |

Пример: разница в памяти

Генератор занимает в 40 000 раз меньше памяти!
Генератор занимает в 40 000 раз меньше памяти!

4. Бесконечные последовательности с генераторами
Ты можешь создать бесконечный генератор!

Генератор — единственный способ работать с бесконечными данными!
Генератор — единственный способ работать с бесконечными данными!

5. Генераторы + `yield from`

Если у нас есть вложенные генераторы, можно использовать yield from.

-7

Вывод:

-8

`yield from` передает управление другому генератору.

6. Лайфхаки с генераторами

Генераторное выражение (аналог list comprehension)

Записывается короче, чем функция.
Записывается короче, чем функция.

Генератор бесконечной последовательности Фибоначчи

Легко создаем бесконечную последовательность!
Легко создаем бесконечную последовательность!

Генератор для чтения больших файлов

Генератор читает файл по строкам, экономя память.
Генератор читает файл по строкам, экономя память.

7. Когда использовать генераторы?
Когда нужно работать с огромными данными (файлы, базы данных).
Когда
нужны бесконечные последовательности.
Когда нужно сэкономить память.
Когда не нужен случайный доступ к элементам.

8. Заключение
Генераторы
создают значения по запросу, не загружая память.
yield
сохраняет состояние и продолжает выполнение с последнего места.
Они
незаменимы при работе с большими данными и бесконечными потоками.

#python #генераторы #оптимизация #память #yield