В нескольких местах в Интернете, включая ответы в Stack Overflow (например, this , this & this ), укажите, что итераторы Python должны реализовывать как __next__
метод (который я понимаю) и метод __iter__
. Эти места справедливо заключают, что все итераторы также являются повторяемыми. Даже PyCharm выдает предупреждение типа, если переменная, помеченная как typing.Iterator
, не реализует этот метод __iter__
.
В отличие от них, официальный Python раздел руководства по итераторам только упоминает необходимость в методе __next__
:
Функция возвращает объект-итератор, который определяет метод __next__()
, который обращается к элементам в контейнере по одному
Итак, мой вопрос: должны ли Python итераторы формально быть итерируемыми сами по себе? Я лично не понимаю, почему это должно быть правдой и почему мы не можем полностью разделить требования для Iterable
и Iterator
.