Есть функция def f(x): print(x); return x. Создали g = (f(x) for x in [1, 2, 3]). Сразу после создания g, до любой итерации, сколько раз выполнится print(x)?

AБудет вызвана 3 раза
BБудет вызвана 1 раз
CБудет вызвана 0 раз
DБудет вызвано исключение
Правильный ответ. Создание генератора не вычисляет элементы: код внутри запускается лишь при итерации.

Разбор

Выражение (f(x) for x in [1, 2, 3]) лишь создаёт объект-генератор. Тело генератора — в том числе и вызовы f(x) — будет исполняться только при next(g) или цикле for x in g. До первой итерации функция f не вызывается ни разу, поэтому ничего не выводится. Каждое последующее обращение к генератору будет триггерить ровно один вызов f.

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

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