Какое объяснение лучше всего описывает разницу между iterable и iterator в контексте повторных проходов?
A
iterable всегда одноразовый, а iterator можно перебирать в for бесконечно сколько угодно раз без сброса состоянияB
iterator нельзя использовать в for, а iterable можно: разница в том, какой объект поддерживает синтаксис циклаC
iterable возвращает новый iterator при каждом вызове iter(obj), поэтому по нему обычно можно проходить несколько раз; iterator хранит состояниеDРазницы между
iterable и iterator нет: любой объект в Python можно итерировать сколько угодно раз без потери данных и сброса позицииПравильный ответ.
iterable — это источник итераторов, iterator — это «курсор» по данным, который исчерпывается после прохода.Разбор
Список, строка, словарь — обычно iterable: iter(obj) создаёт новый iterator, поэтому вы можете сделать два независимых for-прохода. iterator (например, результат iter(list) или генератор) сам хранит позицию и после исчерпания не «перематывается». Если нужен повторный проход, создавайте новый iterator или материализуйте данные.
Проверь себя · 1/3разбор после ответа
Что произойдёт при выполнении
it = iter([]) и затем next(it)?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `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)` оказался пустым словарём. Почему?
- Все вопросы по «Итераторы и генераторы» →