⚡ Кратко
Используйте yield вместо накопления списка в памяти. Для бесконечных последовательностей генераторы — естественный выбор.
Списки vs генераторы
❌ Список в памяти
def get_squares(n):
result = []
for i in range(n):
result.append(i ** 2)
return result
✅ Генератор
def get_squares(n):
for i in range(n):
yield i ** 2
Ручной цикл vs yield from
❌ Вложенный цикл
def merge(*lists):
for lst in lists:
for item in lst:
yield item
✅ yield from
def merge(*lists):
for lst in lists:
yield from lst
Когда использовать генераторы
- Большие данные, которые не помещаются в память.
- Бесконечные или неизвестные по длине последовательности.
- Потоковая обработка: чтение файлов, логов, сетевых данных.
- Ленивые вычисления: когда не все элементы нужны сразу.