Выбор ответа Junior Итераторы и генераторы спрашивают часто обновлено

Итерируемый объект и итератор: разница

Вопрос

Чем итератор отличается от итерируемого объекта?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Итератор помнит позицию и даёт next, итерируемый даёт iter. Итерируемый (список, строка, dict) умеет выдавать новый итератор на каждый iter(), поэтому его обходят многократно.

Варианты ответа

  1. Итератор хранит все элементы в памяти, итерируемый вычисляет их лениво
  2. Итерируемый объект обходится один раз, итератор сколько угодно
  3. Итератор помнит позицию и даёт __next__, итерируемый даёт __iter__правильный ответ
  4. Это синонимы: оба имеют только метод __iter__

Разбор

Итерируемый (список, строка, dict) умеет выдавать новый итератор на каждый iter(), поэтому его обходят многократно. Итератор помнит, где остановился, отдаёт следующий элемент через __next__ и одноразовый. Ленивость к различию не относится: список хранит всё, а range тоже итерируемый и ленивый. Варианты про «наоборот» и «синонимы» неверны: у итератора обязательно есть __next__.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме