Автор оригинала: Daniel Pimeh.
Python: Проверьте, является ли переменная списком
Вступление
Python-это динамически типизированный язык, и переменные типы данных выводятся без явного вмешательства разработчика.
Если бы у нас был код, который нуждался в списке, но не имел подсказок типа, которые являются необязательными, как мы можем избежать ошибок, если используемая переменная не является списком?
В этом уроке мы рассмотрим как проверить, является ли переменная списком в Python , используя функции type()
и isinstance ()
, а также оператор is
:
- Проверьте, является ли переменная списком с типом()
- Проверьте, является ли переменная списком с оператором is
- Проверьте, является ли переменная списком с isinstance()
Разработчики обычно используют type()
и is
, хотя в определенных контекстах они могут быть ограничены, и в этом случае лучше использовать функцию isinstance ()
.
Проверьте, является ли переменная списком с типом()
Встроенная функция type()
может быть использована для возврата типа данных объекта. Давайте создадим словарь, кортеж и список и используем функцию 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 isThe type of aDict is The type of aTuple is
Теперь, чтобы изменить поток кода программно, основываясь на результатах этой функции:
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)
всегда будет указывать на ту же ячейку памяти, что и класс этой переменной
. Итак, если мы сравним результаты функции type()
нашей переменной с классом list
, то она вернет True
, если наша переменная
является списком.
Давайте взглянем на оператор 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
, даже если переменная является-a list, хотя и является его подклассом.
Этот недостаток оператора is
исправляется в следующем подходе – с помощью функции isinstance ()
.
Проверьте, является ли переменная списком с isinstance()
Функция isinstance ()
-это еще одна встроенная функция, которая позволяет проверить тип данных переменной. Функция принимает два аргумента – переменную, для которой мы проверяем тип, и тип, который мы ищем.
Эта функция также принимает во внимание подклассы, поэтому любой list
подкласс также вернет True
для того, чтобы быть экземпляром list
.
Давайте попробуем это сделать с помощью обычного list
и User List
из фреймворка 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 ()
.