17 / 72
ТеорияБазовыйMiddle

Iterable vs Iterator: протокол итерации изнутри

Частота на собеседованиях: Высокая - база под весь модуль про генераторыСпрашивают в: Т-Банк, Яндекс, Сбер

Начинаем новый модуль. Генераторы - вторая по частоте тема после декораторов, которую спрашивают почти на любом Python-собеседовании. И, как с декораторами, лучше начать не с yield, а с того, что стоит под ним - протокола итерации.

Аналогия: представь книгу и закладку в ней. Книга - это то, что можно листать, в ней есть содержимое от начала до конца. Закладка - это конкретная позиция, отметка "я остановился здесь, дай мне следующую страницу, когда я вернусь". Книга сама по себе не запоминает, где ты остановился - это делает закладка. В Python ровно такое же разделение: есть Iterable ("книга", то, что можно перебирать) и Iterator ("закладка", то, что реально помнит текущую позицию и умеет отдавать следующий элемент).