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

Когда выполняется тело генератора

Вопрос

Что напечатает строка g = gen()?

def gen():
    print('начало')
    yield 1

g = gen()

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

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

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

Коротко

Правильный ответ: Ничего: тело пойдёт при next(g). Вызов функции-генератора только создаёт объект-генератор, код тела не выполняется.

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

  1. начало, тело выполнится до yield
  2. начало и затем 1
  3. StopIteration, генератор ещё пуст
  4. Ничего: тело пойдёт при next(g)правильный ответ

Разбор

Вызов функции-генератора только создаёт объект-генератор, код тела не выполняется. При первом next(g) выполнится print и генератор остановится на yield 1. Это частая ловушка: проверки аргументов в генераторе срабатывают не при вызове, а при первой итерации.

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

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

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