Итак, вот что я понял:
“Объект-итератор” - это некий неотображаемый объект, что разрешает проводить на себе процесс итерации.
Термины “Объект-итератор” и “Итератор” это одно и тоже. (Классы звать пока что не будем)
iterator = iter('Hello')
__next__ - перегружаемый “оператор”, что вызывается при вызове функции next(“Объект итератор”)
Циклы автоматизировано создают объекты-итераторы при итерировании итерируемого объекта (последовательности) - сам точно не знаю.
Далее:
У некоторых встроенных типов данных (объектов) например объект-файл имеется свой итератор с помощью которого они адаптируются. И, уже его методы используют его, то есть создавать отдельный итератор для них не надо.
В чём собственно жопа:
Пока писал этот текст многое стало на свои места, но вопросы всё таки остались:
1.) Как узнать: имеет ли объект в себе итератор и с ним можно проводить операции не делая из него последовательность или же он этого итератора не имеет и его нужно отдельно для него создавать, пример:
file = open('nice.txt', 'r') print(next(file), end='') print(next(file), end='') print(next(file), end='') # Здесь всё заработает, так как объект имеет свой итератор
В сравнение с:
lister = ['Hello', 1, 5.2, {5: 'do'}] next(lister) # TypeError: 'list' object is not an iterator # Так как итератор мы не создавали думая что объект имеет свой.
2.) Итерируемый объект (вот тут первый “пробел”) - Объект к которому применимы инструменты итерирования (инструкции for, while, генераторы и т.д) - по идее любой объект последовательности (даже словарь), ИЛИ ЖЕ: Синоним слова объект-итератор? Чтоб было более понятней:
my1 = iter([1, 2, 3, 4, 5])
my2 = 'Или же это?'
Ещё одно недопонимание, оффтоп:
Поток вывода-ввода в Python (sys.stdout) как то связан с обычными компьютерными потоками? (понимаю вопрос уж слишком чайниковый тем не менее хочется убрать туман в моей голове)