Есть функция 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)?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `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)` оказался пустым словарём. Почему?
- Все вопросы по «Итераторы и генераторы» →