Как в Python создать генератор с помощью yield?

Как в Python создать генератор с помощью yield? функция Python с ключевым словом yield приостанавливает работу после возврата значения сохраняет своё состояние между вызовами формирует объект-генератор (итератор)…

Короткий ответ

Что ответить на собеседовании

Как в Python создать генератор с помощью yield? функция Python с ключевым словом yield приостанавливает работу после возврата значения сохраняет своё состояние между вызовами формирует объект-генератор (итератор) обеспечивает эффективную обработку больших объёмов данных применяет ленивую (отложенную) генерацию элементов снижает потребление памяти и повышает производительность циклов и потоков данных

Подробный разбор

Ответ с пояснениями

Как в Python создать генератор с помощью yield?

  • функция Python с ключевым словом yield
  • приостанавливает работу после возврата значения
  • сохраняет своё состояние между вызовами
  • формирует объект-генератор (итератор)
  • обеспечивает эффективную обработку больших объёмов данных
  • применяет ленивую (отложенную) генерацию элементов
  • снижает потребление памяти и повышает производительность циклов и потоков данных

Развёрнутый ответ

Краткий ответ

В Python генератор с помощью yield представляет собой функцию, вызов которой возвращает итератор для последовательного обхода в цикле. Обычная функция возвращает итоговое значение и прекращает выполнение, тогда как генератор с yield отдаёт значения по одному, временно останавливаясь и сохраняя своё текущее состояние. При следующем вызове выполнение возобновляется с точки последней остановки.

Основные особенности

  • В генераторе ключевое слово yield выполняет роль return лишь частично: оно передаёт текущее значение наружу, но не завершает функцию, а приостанавливает её до следующего обращения.
  • Генераторы бережно расходуют память, поскольку не создают всю коллекцию целиком. Элементы вычисляются только по мере запроса, то есть используется ленивое вычисление.
  • Такой подход подходит для обработки больших потоков данных и бесконечных последовательностей, полный результат которых нельзя хранить одновременно — например, при чтении логов или работе с потоковым API.

Пример:

def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1

При обходе count_up_to(5) итератор по очереди вернёт числа от 1 до 5.

Практическое применение

В Python 3.x генераторы считаются стандартным инструментом для обработки потоков данных, асинхронных операций (в связке с asyncio) и создания собственных итераторов без промежуточных коллекций. Благодаря этому повышается производительность и уменьшается расход памяти. В больших проектах генераторы часто применяют для построчной обработки CSV-файлов и логов, чтобы не загружать весь файл в память.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку