Вступление
Python - это язык с динамической типизацией, и типы данных переменных выводятся без явного вмешательства разработчика.
Если бы у нас был код, которому нужен список, но не хватало подсказок типа, которые не являются обязательными, как мы можем избежать ошибок, если используемая переменная не является списком?
В этом руководстве мы рассмотрим, как проверить, является ли переменная
списком в Python , используя функции type()
и isinstance()
, а
также оператор is
- Проверьте, является ли переменная списком с type ()
- Проверьте, является ли переменная списком с оператором is
- Проверьте, является ли переменная списком с помощью isinstance ()
Разработчики обычно используют 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."
Проверьте, является ли переменная списком с оператором 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()
функции.
Проверьте, является ли переменная списком с помощью 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 - это язык с динамической типизацией, и иногда из-за ошибки пользователя мы можем иметь дело с неожиданным типом данных.
В этом руководстве мы рассмотрели три способа проверить, является ли
переменная list
в Python: функция type()
, оператор is
isinstance()
.