Python 3.3+collectionsпонятие
collections.abc.Iterator
collections.abc — протоколы
Протокол итератора: есть __next__ и __iter__ (возвращает себя).
Синтаксис
isinstance(obj, collections.abc.Iterator)
Каждый Iterator — это Iterable, но не наоборот: список перебирать можно, а сам итератором он не является, им становится результат iter(списка). Практический смысл такой проверки — узнать, что объект одноразовый: после полного прохода итератор исчерпан, второй for по нему не даст ничего, поэтому функции, которой нужен повторный проход по входу, стоит сразу материализовать его в list.
Примеры
import collections.abc as abc
print(isinstance(iter([1]), abc.Iterator)) # → True
print(isinstance([1, 2], abc.Iterator)) # → False
print(isinstance([1, 2], abc.Iterable)) # → True
print(isinstance(map(str, [1, 2]), abc.Iterator)) # → True
it = iter([1])
print(next(it, 'stop'), next(it, 'stop')) # → 1 stop
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности