Дан генератор def gen(): yield 1; yield 2; yield 3. Выполнили g = gen(), first = next(g), остаток = list(g). Чему равен остаток?
AСписок
[1, 2, 3]BСписок
[1, 2]CСписок
[3]DСписок
[2, 3]Правильный ответ. Генератор продолжает работу с того
yield, на котором остановился, и не возвращается к уже отданным значениям.Разбор
После first = next(g) генератор отдал 1 и приостановился сразу за первым yield. Дальнейший list(g) продолжает обход с того же места: следующий yield 2 даст 2, потом yield 3 даст 3, и генератор завершится. Поэтому остаток равен [2, 3]. Уже отданное значение 1 повторно не возвращается, и обход не «обнуляется».
Проверь себя · 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)` оказался пустым словарём. Почему?
- Все вопросы по «Итераторы и генераторы» →