Автор оригинала: Naazneen Jatu.
Python: Проверьте, является ли переменная словарем
Вступление
Переменные действуют как контейнер для хранения данных. Разработчик может использовать подсказки типа при создании переменных или передаче аргументов, однако это необязательная функция в Python, и многие кодовые базы, старые и новые, еще не имеют их. Чаще всего переменная в Python не имеет информации о типе, который хранится.
Если бы у нас был код, который нуждался в словаре, но не имел подсказок типа, как мы можем избежать ошибок, если используемая переменная не является словарем?
В этом уроке мы рассмотрим как проверить, является ли переменная словарем в Python , используя функции type()
и isinstance ()
, а также оператор is
:
- Проверьте, является ли переменная словарем с типом()
- Проверьте, является ли переменная словарем с оператором is
- Проверьте, является ли переменная словарем с помощью isinstance()
Разработчики обычно используют type()
и is
, хотя в определенных контекстах они могут быть ограничены, и в этом случае лучше использовать функцию isinstance ()
.
Проверьте, является ли переменная словарем с типом()
Мы можем использовать функцию type ()
, чтобы мгновенно получить тип любой переменной. Для переменной типа Dictionary
она должна возвращать 'dict'>
: ‘dict’>
squares = {1: 1, 2: 4, 3: 9} print(type(squares))
Это приводит к:
Проверьте, является ли переменная словарем с оператором is
В Python is
является оператором идентификации. Он проверяет, идентичны ли оба операнда друг другу. Идентичность указывает на то, что они относятся к одной и той же ячейке памяти.
Мы можем использовать оператор is
с результатом вызова type()
с переменной и классом dict
. Он выведет True
только в том случае, если type()
указывает на ту же ячейку памяти, что и класс dict
. В противном случае он выведет False
.
В качестве проверки здравомыслия мы можем использовать функцию id ()
, чтобы получить адрес объекта в памяти и проверить сравнение:
squares = {1: 1, 2: 4, 3: 9} print(type(squares) is dict) # True print("memory address of type(squares):", id(type(squares))) print("memory address of dict:", id(dict)) # Should have same ID as type(squares)
Этот код будет производить следующие выходные данные на интерпретаторе Python:
True memory address of type(squares): 1609576584 memory address of dict: 1609576584
Примечание: Адрес памяти может отличаться для вас, но один и тот же идентификатор должен присутствовать как для типа (квадраты)
, так и для |/dict .
Одно из предостережений этого метода заключается в том, что он не работает, если переменная является типом, который является подклассом dict
. Например, предыдущий код не работал бы, если бы переменная squares
была Упорядоченным словарем вместо этого:
from collections import OrderedDict squares = OrderedDict([(1, 1), (2, 4), (3, 9)]) print(type(squares) is dict) # False print("memory address of type(squares):", id(type(squares))) print("memory address of dict:", id(dict)) # Different ID as they're different classes
Это выводит:
False memory address of type(squares): 9464512 memory address of dict: 9481952
Если ваш код необходим для работы с подклассами словарей, то вы предпочтете использовать метод isinstance ()
.
Проверьте, является ли переменная словарем с isinstance()
Как мы уже видели, оператор is
возвращает True
, когда адрес памяти обоих объектов одинаков. Если у нас есть Словарь типа , унаследованный от класса dict
, он вернет False
. Например, словарь подкласса dict
like OrderedDict
или defaultdict
не будет указывать на тот же адрес памяти, что и dict
.
Здесь нам на помощь приходит функция isinstance ()
. Эта функция принимает два аргумента: объект и класс. Если объект является экземпляром класса или его подклассов, он вернет True
. Если объект не является экземпляром данного класса, прямым или косвенным, он возвращает False
.
Вот пример кода, чтобы проверить, является ли переменная словарем, используя функцию isinstance()
:
from collections import OrderedDict # Variable of type dict squares = {1: 1, 2: 4, 3: 9} print(isinstance(squares, dict)) # True # Variable of type OrderedDict (Subclass of dict) cubes = OrderedDict(((1, 1), (2, 8))) print(isinstance(cubes, dict)) # True
Этот код будет производить следующие выходные данные на интерпретаторе Python:
True True
Вывод
Этот учебник показал способы, с помощью которых мы можем проверить, является ли переменная словарем. Мы впервые увидели функцию type ()
, которая выводит 'dict'>
для любого объекта словаря. Затем мы увидели использование оператора is
для проверки того, указывает ли тип переменной на dict
в ячейке памяти. Это возвращает True
или False
соответственно. ‘dict’>
Наконец, мы видели, что is
не удается идентифицировать унаследованные объекты словаря. Когда мы хотим захватить унаследованные объекты, мы можем использовать функцию isinstance ()
. Он возвращает True
, если объект прямо или косвенно является экземпляром данного класса ( dict
в этой статье), и False
в противном случае.
Поскольку оба эти метода возвращают True
или False
, мы можем легко использовать их в условных операторах. Если вы явно не хотите отклонять подклассы dict
, функция isinstance()
является наиболее надежным способом проверить, является ли переменная словарем.