Создали g = (x for x in [1, 2, 3]), затем s1 = sum(g) и s2 = sum(g). Чему равно s2?

AЦелое число 6
BЦелое число 3
CЦелое число 0
DИсключение TypeError
Правильный ответ. Генератор обходится один раз: после первого полного прохода последовательность считается пустой.

Разбор

g = (x for x in [1, 2, 3]) создаёт одноразовый генератор. Первый sum(g) обходит его до конца и возвращает 6. После этого внутри g элементов уже нет, поэтому второй sum(g) — это сумма пустой последовательности, а она по определению равна 0. Никакого автоматического «перезапуска» не происходит, и исключение sum не выбрасывает. Чтобы получить 6 ещё раз, нужно создать генератор заново.

Проверь себя · 1/3разбор после ответа
Функция-генератор squares(n) делает yield i * i для i из range(n). Чему равно list(squares(3))?
Тренировать Python в Telegram

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