Дан генератор 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 повторно не возвращается, и обход не «обнуляется».

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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