Основные преимущества генераторов перед обычными функциями, возвращающими списки или другие полные коллекции:
Экономия памяти: Генераторы вычисляют и возвращают элементы по требованию (ленивое вычисление), а не генерируют всю последовательность сразу. Это критично при работе с большими объемами данных или бесконечными последовательностями.
Производительность: Поскольку элементы генерируются по одному, можно начать обрабатывать первые элементы, не дожидаясь, пока будут сгенерированы все.
Простота реализации и читаемость кода: Для простых итераторов генератор often-realized using yield keyword in a function body, which is more concise and understandable than writing a class with __iter__ and __next__ methods.
Пример:
python