Python 3.3+collectionsпонятие
collections.abc.Iterable
collections.abc — протоколы
Протокол «можно перебирать в for» (есть __iter__).
Синтаксис
isinstance(obj, collections.abc.Iterable)
Проверка isinstance ищет только метод __iter__, поэтому старый класс с одним __getitem__ вернёт False, хотя в for он прекрасно перебирается — честнее просто вызвать iter(obj) внутри try/except TypeError. И помните, что строка тоже Iterable: рекурсивный обход вложенных списков с условием «если Iterable — заходим внутрь» зациклится на отдельных символах.
Примеры
import collections.abc as abc
print(isinstance([1, 2], abc.Iterable)) # → True
print(isinstance('hi', abc.Iterable)) # → True
print(isinstance(42, abc.Iterable)) # → False
print(issubclass(range, abc.Iterable)) # → True
print([x for x in [1, [2, 3], 'ab'] if isinstance(x, abc.Iterable)]) # → [[2, 3], 'ab']
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности