Как проверить является ли объект итерируемым в Python

Python не имеет встроенного метода isiterable() для проверки, является ли объект итерируемым или нет. Но есть несколько способов, с помощью которых можно определить, является ли объект итерируемым. Некоторые из подходов являются дорогостоящими операциями, а некоторые иногда не осуществимы в использовании.

Является ли объект итерируемым

Чтобы проверить, является ли объект итерируемым в Python, используйте метод iter(). Python iter() — это встроенная функция, которая возвращает итератор для данного объекта.

Метод iter() — это наиболее точный способ проверить, является ли объект итерируемым, и обработать исключение TypeError, если это не так.

Синтаксис функции iter() следующий.

Пример

Вывод:

Давайте назначим целое число переменной данных и проверим итерацию.

Вывод:

Проверка с помощью коллекций в Python

Чтобы проверить, является ли объект итерируемым в Python, используйте абстрактный класс Iterable модуля collections. Модуль collections предоставляет некоторые абстрактные базовые классы, которые позволяют запрашивать классы или экземпляры, предоставляют ли они определенную функциональность.

Python isinstance() — это встроенный метод, который возвращает True, если указанный объект имеет указанный тип. В противном случае возвращается False. Мы будем использовать абстрактный класс Iterable и метод isinstance(), чтобы проверить, является ли объект итерируемым или нет в Python.

Чтобы работать с классом Iterable, нам нужно сначала его импортировать.

Теперь давайте определим целое число, которое не является итерируемым, но давайте проверим его, используя класс Iterable и метод isinstance() с оператором if-else в Python.

Запустите программу и посмотрите вывод.

Как видите, мы получили правильный ответ: целое число в Python не является итерируемым типом данных.

Теперь давайте назначим список переменной данных, которая является итерируемой, и посмотрим, какой результат она возвращает.

Вывод:

Да, список является итерируемым, что означает, что наш способ определить, является ли объект итерируемым, верен.

Почему метод коллекций не является полным решением

Проверка итерируемого объекта с помощью метода isinstance(obj, Iterable) обнаруживает классы, зарегистрированные как Iterable или имеющие метод __iter__(), но не обнаруживает классы, которые выполняют итерацию с помощью метода __getitem__().

Единственный точный подход — определить, является ли объект итерируемым, — это вызвать iter(obj).

Утиная типизация

Утиная типизация — это концепция, связанная с динамической типизацией, где тип или класс объекта менее важны, чем определяемые им методы. Когда вы используете утиную типизацию, вы вообще не проверяете типы. Вместо этого вы проверяете наличие заданного метода или атрибута.

Вывод:

Теперь, если вы присвоите переменной данных целое число, она будет выполняться, кроме блока с ошибкой типа.

Вывод:

Как и ожидалось, утиная типизация отлично работает, когда дело доходит до определения того, является ли переменная итерируемой или нет.

Является ли объект итерируемым в Python

Python __iter__

Этот подход не рекомендуется, так как вы используете частные свойства языка Python, и он не работает со строкой также, поскольку строка является итерируемой.

Оцените статью

Автор статей и разработчик, делюсь знаниями.

Программирование на Python