Что создаёт выражение squares = (x * x for x in xs)?

AСписок значений типа list
BКортеж tuple со значениями
CФункцию-генератор, как при def с yield
DОбъект-генератор с ленивыми значениями
Правильный ответ. Круглые скобки вокруг выражения с for создают объект-генератор, а не список и не кортеж.

Разбор

(x * x for x in xs) — это generator expression: он не вычисляет значения сразу, а возвращает объект-генератор, который выдаёт квадраты по одному при next() или цикле. Списочное включение использует квадратные скобки, а не круглые. Кортеж так не создаётся: для него нужен литерал (1, 2, 3) или вызов tuple(...). Функция-генератор — это конструкция с def и yield; здесь же нет определения функции, есть только готовый объект-генератор.

Проверь себя · 1/3разбор после ответа
Дана функция-генератор def evens(xs): for x in xs: if x % 2 == 0: yield x. Чему равен результат list(evens([1, 2, 3, 4]))?
Тренировать Python в Telegram

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