Есть функция def f(x): print(x); return x. Создали g = (f(x) for x in [1, 2, 3]). Сразу после создания g сколько раз выполнится print(x)?
A3 раза
B1 раз
C0 раз
DСразу будет выброшено исключение
StopIteration.Правильный ответ. Generator expression не вызывает
f(x) при создании; вызовы происходят при итерации.Разбор
Строка g = (f(x) for x in [1, 2, 3]) создаёт объект генератора, но не запускает вычисление элементов. f(x) будет вызываться только когда вы начнёте читать из g — например, через next(g), list(g) или цикл for x in g.
Проверь себя · 1/3разбор после ответа
Что создаёт выражение
squares = (x * x for x in xs)?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `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()` что будет выведено в консоль?
- Что создаёт выражение `squares = (x * x for x in xs)`?
- В отладке вы сделали `pairs = zip(users, spends)`, затем `debug = list(pairs)`. После этого `d = dict(pairs)` оказался пустым. Почему?
- Все вопросы по «Итераторы и генераторы» →