Дан генератор def gen(): yield 1; yield 2; yield 3. Выполнили g = gen(), first = next(g), остаток = list(g). Чему равен остаток?

AСписок [1, 2, 3]
BСписок [1, 2]
CСписок [3]
DСписок [2, 3]
Правильный ответ. Генератор продолжает работу с того yield, на котором остановился, и не возвращается к уже отданным значениям.

Разбор

После first = next(g) генератор отдал 1 и приостановился сразу за первым yield. Дальнейший list(g) продолжает обход с того же места: следующий yield 2 даст 2, потом yield 3 даст 3, и генератор завершится. Поэтому остаток равен [2, 3]. Уже отданное значение 1 повторно не возвращается, и обход не «обнуляется».

Проверь себя · 1/3разбор после ответа
Что создаёт выражение squares = (x * x for x in xs)?
Тренировать Python в Telegram

Ещё вопросы по теме «Итераторы и генераторы»