Согласно глоссарию Python 2 , итерабельными являются
все типы последовательностей (такие как
blockquote>list
,str
иtuple
), а некоторые типы non-sequence, такие какdict
иfile
, и объекты любых классов, которые вы определяете с помощью метода__iter__()
или__getitem__()
. Итераторы могут использоваться в цикле for и во многих других местах, где необходима последовательность (zip (), map (), ...). Когда итерируемый объект передается как аргумент встроенной функции iter (), он возвращает итератор для объекта.Конечно, учитывая общий стиль кодирования для Python на основе тот факт, что «проще попросить прощения, чем разрешение». Общее ожидание заключается в использовании
try: for i in object_in_question: do_something except TypeError: do_something_for_non_iterable
. Но если вам нужно явно проверить его, вы можете проверить его итерабельность на
hasattr(object_in_question, "__iter__") or hasattr(object_in_question, "__getitem__")
, Вам нужно проверить оба, потому чтоstr
s не имеют метода__iter__
(по крайней мере, не в Python 2, в Python 3 они делают), а потому, что объектыgenerator
не имеют метода__getitem__
.