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

Введение Python - это язык с динамической типизацией, и типы данных переменных выводятся без явного вмешательства разработчика. Если бы у нас был код, который нуждался в списке, но не имел подсказок типа, которые не являются обязательными, как мы можем избежать ошибок, если используемая переменная не является списком? В этом руководстве мы рассмотрим, как проверить, является ли переменная списком в Python, используя функции type () и isinstance (), а также оператор is: * Проверьте, является ли переменная списком с типом () * Проверять

Вступление

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." 

Проверьте, является ли переменная списком с оператором 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() .

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus