Mediumgeneratoryield

Что такое генератор и yield?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Generator — функция с yield, возвращающая lazy iterator. Каждый yield приостанавливает выполнение, запоминая состояние; next() продолжает после yield.

def count():
    n = 0
    while True:
        yield n
        n += 1

c = count()
next(c)   # 0
next(c)   # 1   (бесконечный генератор)

# Чтение большого файла по строкам
def read_lines(path):
    with open(path) as f:
        for line in f:
            yield line.rstrip()
  • Lazy — не вычисляет всё сразу, экономит memory;
  • Бесконечные последовательности, streaming обработка;
  • Generator expression (x*x for x in range(N)) — компактная форма;
  • send(value), throw(exc), close() — расширенный протокол;
  • yield from gen — делегировать subgenerator'у.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.