Какой объект является итератором и может быть напрямую использован в next(obj)?
AИтератор
iter([1, 2])BОбычный список
[1, 2]CОбычная строка
'ab'DОбычное множество
{1, 2}Правильный ответ.
next(obj) работает только с объектами-итераторами; обычные коллекции — это итерируемые, но не итераторы.Разбор
iter([1, 2]) возвращает объект-итератор, у которого есть метод __next__, поэтому next(...) продвигает его и отдаёт следующий элемент. Список, строка и множество — это итерируемые объекты, к ним можно применить for, но прямой next([1, 2]) поднимет TypeError, потому что у них нет состояния «текущей позиции». Чтобы вызвать next от них, нужно сначала обернуть их в iter(...) и работать с возвращённым итератором.
Проверь себя · 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)` оказался пустым словарём. Почему?
- Все вопросы по «Итераторы и генераторы» →