Python Glossary English

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Сообщить о неточности