Выбор ответа Middle Итераторы и генераторы обновлено
return внутри генератора
Вопрос
Что произойдёт с return 42 внутри генератора?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Итерация завершится, 42 уйдёт в StopIteration.value. В генераторе return value завершает итерацию: Python бросает StopIteration(value). for и list() значение игнорируют, а result = yield from gen() получает его.
Варианты ответа
- 42 будет выдано как последний элемент итерации
- Итерация завершится, 42 уйдёт в
StopIteration.valueправильный ответ SyntaxError: в генераторе нельзяreturnсо значением- Генератор начнёт сначала и выдаст 42 при следующем
next
Разбор
В генераторе return value завершает итерацию: Python бросает StopIteration(value). for и list() значение игнорируют, а result = yield from gen() получает его. Элементом 42 не станет. Синтаксической ошибки нет с Python 3.3, а перезапуска генераторов не бывает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Итераторы и генераторы»
- Когда выполняется тело генератора
- Разбить последовательность на пачки
- Рекурсивно развернуть вложенные списки
- Конвейер обработки лога на генераторах
- Свой итерируемый класс, который можно обходить много раз
- Когда выполняется finally в недочитанном генераторе
- Полезные функции itertools
- Ленивые вычисления