Функция-генератор squares(n) делает yield i * i для i из range(n). Чему равно list(squares(3))?

A[1, 4, 9]
B[0, 1, 4]
C[0, 1, 4, 9]
D[0, 2, 4]
Правильный ответ. range(n) выдаёт значения от 0 до n - 1, поэтому квадраты считаются для 0, 1 и 2.

Разбор

range(3) — это последовательность 0, 1, 2 (правая граница не включается). Для каждого такого i функция-генератор отдаёт i * i, то есть 0, 1, 4. Значит list(squares(3)) равен [0, 1, 4]. Если бы интервал начинался с 1 и включал 3, получился бы [1, 4, 9], а удвоение давало бы [0, 2, 4] — это уже не квадраты.

Проверь себя · 1/3разбор после ответа
Есть it = iter([5]). Выполнили next(it), а затем next(it, -1). Что вернёт второй вызов next(it, -1)?
Тренировать Python в Telegram

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