0Pricing
Python Academy · Урок

Генерирующие выражения

Создавайте ленивые последовательности с помощью генерирующих выражений для эффективного использования памяти.

«Генерирующие выражения» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Введение

Генераторные выражения — это ленивые включения: они выдают значения по одному, не создавая список в памяти.

Синтаксис генераторного выражения

(expression for item in iterable) использует круглые скобки. Оно возвращает объект-генератор, NOT список.
gen = (x**2 for x in range(5))
print(gen)  # generator object
print(next(gen))  # 0
print(next(gen))  # 1

Эффективное использование памяти

Генератор хранит только одно значение за раз. sum(x**2 for x in range(10**7)) использует память O(1), тогда как список — больше.
total = sum(x**2 for x in range(100))
print(total)

Использование генератора

Генераторы используются только один раз. После исчерпания возникает StopIteration, и больше значений не остаётся.
gen = (x for x in range(3))
for val in gen:
    print(val)
# gen is now exhausted

Генератор как аргумент функции

Если генератор является единственным аргументом, дополнительные скобки можно опустить: sum(x**2 for x in range(10)).
print(sum(x**2 for x in range(10)))
print(max(len(w) for w in ['cat', 'elephant', 'ant']))

Объединение генераторов

Генераторы можно лениво объединять в цепочку: evens = (x for x in range(100) if x%2==0); big = (x for x in evens if x>50).
evens = (x for x in range(100) if x % 2 == 0)
big_evens = (x for x in evens if x > 50)
print(list(big_evens))

Преобразование в список или кортеж

list(gen) или tuple(gen) материализует все значения. Делайте это, когда нужен произвольный доступ или несколько проходов.
gen = (x**2 for x in range(5))
print(list(gen))

Генераторное выражение и списковое включение

Используйте генератор, если собираетесь выполнить только один проход или набор данных велик. Используйте список, если нужны len(), индексация или несколько проходов.
import sys
lst = [x**2 for x in range(1000)]
gen = (x**2 for x in range(1000))
print(sys.getsizeof(lst), sys.getsizeof(gen))

Бесконечные генераторы

itertools.count(0) — бесконечный счётчик. Объединяйте его с islice, чтобы получить только нужное количество значений.
import itertools
first10 = list(itertools.islice(itertools.count(0), 10))
print(first10)

any() и all() с генераторами

any(x>5 for x in lst) останавливается при первом True. all() останавливается при первом False. Это очень эффективно.
nums = [1, 3, 7, 2]
print(any(x > 5 for x in nums))
print(all(x > 0 for x in nums))

Конвейеры

Лениво объединяйте преобразования в цепочку: data → filter → transform → aggregate. Каждый этап является генератором; выполнение начинается только при необходимости.
data = range(1000)
filtered = (x for x in data if x % 7 == 0)
transformed = (x * 2 for x in filtered)
print(sum(transformed))

Быстрая проверка

В чём состоит главное преимущество генераторного выражения перед списковым включением с точки зрения использования памяти?

Повторение

Генераторные выражения: (expr for x in it). Ленивое вычисление — память O(1). Используются один раз. Применяйте их с sum/any/all/max. Преобразуйте результат в список, если нужны несколько проходов.

Продолжайте обучение

Отлично! Перейдите к следующему уроку, чтобы углубить свои навыки.

Часто задаваемые вопросы

Урок «Генерирующие выражения» бесплатный?

Да — полный текст урока «Генерирующие выражения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Генерирующие выражения»?

Создавайте ленивые последовательности с помощью генерирующих выражений для эффективного использования памяти. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Генерирующие выражения»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Генераторы списков
  2. Генераторы множеств и словарей
  3. Генерирующие выражения
  4. Ключевое слово yield
← Назад к Python Academy