Введение в функции генератора Python.

Обычная функция в Python обрабатывает все значения, хранит их в памяти и возвращает их вызывающей стороне. Вместо этого функция-генератор не сохраняется в памяти - она ​​генерирует значения с течением времени по мере их запроса вызывающим абонентом.

Представьте, что вы хотите получить общее количество строк в большом файле. Допустим, в файле 72 456 321 строка. Один из подходов - загрузить все содержимое файла в список, а затем зациклить список, увеличивая счетчик на 1 для каждого элемента.

Приведенный выше код очень неэффективен с точки зрения памяти. Ваша цель - узнать только общее количество строк - зачем обрабатывать все строки? Сохранение строк в памяти - пустая трата ресурсов. В зависимости от размера файла ваш компьютер зависнет и, возможно, в конце концов выйдет из строя.

Лучший способ сделать это - использовать функцию генератора. Функция генератора заканчивается оператором yield вместо оператораreturn. yield сохраняет только состояние, которое выбирается при следующем вызове программы.

Оба печатают один и тот же результат. Использование функции генератора более эффективно с точки зрения памяти.

Заключение

Функции генератора идеальны, когда вам требуется только одна часть информации из данных за раз. Получение общего количества строк - это один из уникальных атрибутов файла. Но даже если вам нужно напечатать все строки последовательно, идея та же - вы печатаете по одной. Нет необходимости сохранять все строки в памяти, так как вы не хотите, чтобы они все сразу.

Использование функций генератора не идеально, когда вам нужно манипулировать данными несколько раз, потому что каждый раз вы будете их вычислять.

Спасибо за прочтение.