Выбор ответа Middle Итераторы и генераторы обновлено

return внутри генератора

Вопрос

Что произойдёт с return 42 внутри генератора?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Итерация завершится, 42 уйдёт в StopIteration.value. В генераторе return value завершает итерацию: Python бросает StopIteration(value). for и list() значение игнорируют, а result = yield from gen() получает его.

Варианты ответа

  1. 42 будет выдано как последний элемент итерации
  2. Итерация завершится, 42 уйдёт в StopIteration.valueправильный ответ
  3. SyntaxError: в генераторе нельзя return со значением
  4. Генератор начнёт сначала и выдаст 42 при следующем next

Разбор

В генераторе return value завершает итерацию: Python бросает StopIteration(value). for и list() значение игнорируют, а result = yield from gen() получает его. Элементом 42 не станет. Синтаксической ошибки нет с Python 3.3, а перезапуска генераторов не бывает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме