Выбор ответа Junior Итераторы и генераторы обновлено
Когда выполняется тело генератора
Вопрос
Что напечатает строка g = gen()?
def gen():
print('начало')
yield 1
g = gen()
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ничего: тело пойдёт при next(g). Вызов функции-генератора только создаёт объект-генератор, код тела не выполняется.
Варианты ответа
начало, тело выполнится доyieldначалои затем1StopIteration, генератор ещё пуст- Ничего: тело пойдёт при
next(g)правильный ответ
Разбор
Вызов функции-генератора только создаёт объект-генератор, код тела не выполняется. При первом next(g) выполнится print и генератор остановится на yield 1. Это частая ловушка: проверки аргументов в генераторе срабатывают не при вызове, а при первой итерации.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Итераторы и генераторы»
- Рекурсивно развернуть вложенные списки
- Конвейер обработки лога на генераторах
- Свой итерируемый класс, который можно обходить много раз
- Когда выполняется finally в недочитанном генераторе
- Полезные функции itertools
- Ленивые вычисления
- Протокол итерации
- Генераторное выражение против list comprehension