DevGang
Авторизоваться

Python: проверьте, является ли переменная списком 

Python - это язык с динамической типизацией, и типы данных переменных выводятся без явного вмешательства разработчика.

Если бы у нас был код, который нуждался в списке, но не имел подсказок типа, которые не являются обязательными, как мы можем избежать ошибок, если используемая переменная не является списком?

В этой статье, мы будем разбирать то как проверить, является ли переменная списком в Python, используя функции type() и isinstance(), а также оператора is

Разработчики обычно используют type() и is, хотя они могут быть ограничены в определенных контекстах, в этом случае лучше использовать функцию isinstance().

Проверьте, является ли переменная списком с type()

Встроенная функция type() может использоваться для возврата типа данных объекта. Давайте создадим Dictionary, Tuple и List и воспользуемся функцией type(), чтобы проверить, является ли переменная list или нет:

grocery_list = ["milk", "cereal", "ice-cream"]
aDict = {"username": "Daniel", "age": 27, "gender": "Male"}
aTuple = ("apple", "banana", "cashew")

# Prints the type of each variable
print("The type of grocery_list is ", type(grocery_list))
print("The type of aDict is ", type(aDict))
print("The type of aTuple is ", type(aTuple))

Это приводит к:

The type of grocery_list is  <class 'list'>
The type of aDict is  <class 'dict'>
The type of aTuple is  <class 'tuple'>

Теперь, чтобы программно изменить поток кода на основе результатов этой функции:

a_list = [1, 2, 3, 4, 5]

# Checks if the variable "a_list" is a list
if type(a_list) == list:
    print("Variable is a list.")
else:
    print("Variable is not a list.")

Это приводит к:

Variable is a list.

Проверьте, является ли переменная списком с&nbsp;оператором&nbsp;is

Оператор is используется для сравнения идентичностей в Python. Другими словами, он используется для проверки того, относятся ли два объекта к одному и тому же месту в памяти.

Результат type(variable) всегда будет указывать на то же место в памяти, что и класс этого variable. Итак, если мы сравним результаты функции type() в нашей переменной с классом list, он вернет True если наш variable является списком.

Взглянем на оператора is:

a_list = [1, 2, 3, 4, 5]
print(type(a_list) is list)

Это приводит к:

True

Поскольку для некоторых это может показаться неприемлемым, давайте проверим работоспособность этого подхода и сравним идентификаторы объектов в памяти:

print("Memory address of 'list' class:", id(list))
print("Memory address of 'type(a_list)':", id(type(a_list)))

Теперь они должны вернуть тот же номер:

Memory address of 'list' class: 4363151680
Memory address of 'type(a_list)': 4363151680

Примечание. Если вы выбрали этот подход, следует помнить о любых подтипах. Если вы сравните результат type() любого подтипа списка с классом list, он вернет False, даже если переменная - это список, хотя и является его подклассом.

Этот недостаток оператора is исправлен в следующем подходе - с помощью функции isinstance().

Проверьте, является ли переменная списком с помощью&nbsp;isinstance()

Функция isinstance() - еще одна встроенная функция, которая позволяет вам проверять тип данных переменной. Функция принимает два аргумента - переменную, тип которой мы проверяем, и тип, который мы ищем.

Эта функция также принимает во внимание подклассы, поэтому любые подклассы list также будут возвращать True для экземпляра класса list.

Давайте попробуем это с помощью обычного list и UserList из фреймворка collections:

from collections import UserList

regular_list = [1, 2, 3, 4, 5]
user_list = [6, 7, 8, 9, 10]

# Checks if the variable "a_list" is a list
if isinstance(regular_list, list):
    print("'regular_list' is a list.")
else:
    print("'regular_list' is not a list.")

# Checks if the variable "a_string" is a list
if isinstance(user_list, list):
    print("'user_list' is a list.")
else:
    print("'user_list' is not a list.")

Выполнение этого кода приводит к:

'regular_list' is a list.
'user_list' is a list.

Вывод

Python - это язык с динамической типизацией, и иногда из-за ошибки пользователя мы можем иметь дело с неожиданным типом данных.

В этом руководстве мы рассмотрели три способа проверить, является ли переменная списком в Python - функцией type(), оператором is и функцией isinstance().

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Оплатив хостинг 25$ в подарок вы получите 100$ на счет

Получить