Рубрики
Без рубрики

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

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

Автор оригинала: 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() является наиболее надежным способом проверить, является ли переменная словарем.