Выбор ответа Junior Итераторы и генераторы спрашивают часто обновлено
Итерируемый объект и итератор: разница
Вопрос
Чем итератор отличается от итерируемого объекта?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Итератор помнит позицию и даёт next, итерируемый даёт iter. Итерируемый (список, строка, dict) умеет выдавать новый итератор на каждый iter(), поэтому его обходят многократно.
Варианты ответа
- Итератор хранит все элементы в памяти, итерируемый вычисляет их лениво
- Итерируемый объект обходится один раз, итератор сколько угодно
- Итератор помнит позицию и даёт
__next__, итерируемый даёт__iter__правильный ответ - Это синонимы: оба имеют только метод
__iter__
Разбор
Итерируемый (список, строка, dict) умеет выдавать новый итератор на каждый iter(), поэтому его обходят многократно. Итератор помнит, где остановился, отдаёт следующий элемент через __next__ и одноразовый. Ленивость к различию не относится: список хранит всё, а range тоже итерируемый и ленивый. Варианты про «наоборот» и «синонимы» неверны: у итератора обязательно есть __next__.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Итераторы и генераторы»
- Когда выполняется тело генератора
- Разбить последовательность на пачки
- Рекурсивно развернуть вложенные списки
- Конвейер обработки лога на генераторах
- Свой итерируемый класс, который можно обходить много раз
- Когда выполняется finally в недочитанном генераторе
- Полезные функции itertools
- Ленивые вычисления