Что создаёт выражение squares = (x * x for x in xs)?
AСписок значений типа
listBКортеж
tuple со значениямиCФункцию-генератор, как при
def с yieldDОбъект-генератор с ленивыми значениями
Правильный ответ. Круглые скобки вокруг выражения с
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]))?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `xs = [1, 2, 3]` и `it = iter(xs)`. Сначала выполняется `a = list(it)`, а затем `b = list(it)`. Чему равно `b`?
- Есть `it = iter(['a', 'b'])`. Что вернёт самый первый вызов `next(it)` сразу после создания итератора?
- Дан генератор: `def gen(): print("A"); yield 1; print("B"); yield 2`. Сразу после `g = gen()` что будет выведено в консоль?
- В отладке вы сделали `pairs = zip(users, spends)`, затем `debug = list(pairs)`. После этого `d = dict(pairs)` оказался пустым словарём. Почему?
- Что произойдёт при выполнении `it = iter([])` и затем `next(it)`?
- Все вопросы по «Итераторы и генераторы» →