⚖️ Старый vs Новый: генераторы

⚡ Кратко

Используйте 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

Когда использовать генераторы

  • Большие данные, которые не помещаются в память.
  • Бесконечные или неизвестные по длине последовательности.
  • Потоковая обработка: чтение файлов, логов, сетевых данных.
  • Ленивые вычисления: когда не все элементы нужны сразу.