Узнать тип данных питон

Функции isinstance и type для проверки типов данных

На этом занятии мы поговорим о функции isinstance(), с помощью которой можно выполнять проверку на принадлежность объекта определенным типам данных.

Например, объявим переменную:

и для нее вызовем функцию isinstance(), следующим образом:

Увидим значение True, так как переменная a действительно ссылается на целочисленный объект. А вот если указать:

то уже будет возвращено значение False. Вот так в самом простом варианте работает эта функция. Но у нее есть один нюанс, связанный с булевым типом данных. Если определить переменную:

вернет значение True. Однако, если вместо bool записать int:

то тоже увидим True. Это связано с особенностью реализацией типа bool. Не буду углубляться в эти детали, здесь просто достаточно запомнить этот момент. Но тогда спрашивается, а как отличать тип bool от типа int? Если нужна строгая проверка на типы, то лучше использовать знакомую нам функцию type() с проверкой на равенство:

или, используя оператор is:

Эта функция различает булевы типы от целочисленных:

Или, если мы хотим произвести множественную проверку, то воспользоваться оператором in:

Здесь мы сразу проверяем переменную b на три типа данных.

Сейчас у вас может возникнуть вопрос, зачем нужна функция isinstance(), если проверку типов можно делать функцией type()? В целом, они действительно очень похожи, но isinstance() в отличие от type() делает проверку с учетом иерархии наследования объектов и была разработана для проверки принадлежности объекта тому или иному классу:

Например, тип bool наследуется от int, поэтому isinstance() выдает True для обоих типов, когда b – булева переменная. А функция type() даст True только для типа bool. То есть, здесь проверка происходит без учета иерархии. (Я сейчас не буду углубляться и объяснять, что такое наследование – это уже раздел ООП и предмет отдельного курса).

Теперь, когда мы в целом познакомились с работой функции isinstance(), давайте рассмотрим следующий пример. Предположим, что у нас есть кортеж с произвольными данными:

data = (4.5, 8.7, True, "книга", 8, 10, -11, [True, False])

И наша задача вычислить сумму всех вещественных чисел этой коллекции. Для этого, очевидно, вначале каждый элемент кортежа нужно проверить на вещественный тип данных, а затем, выполнять суммирование. Я вначале сделаю это через обычный цикл for:

s = 0 for x in data: if isinstance(x, float): s += x print(s)

Как видите, у нас получилась нужная сумма. Но эту же задачу можно реализовать лучше, с использованием ранее рассмотренной функции filter():

s = sum(filter(lambda x: isinstance(x, float), data))

Видите, все записано в одну строчку и, кроме того, работает быстрее, так как используются встроенные функции вместо цикла for.

А вот если мы попробуем вычислить сумму целочисленных значений, просто изменив тип данных:

s = sum(filter(lambda x: isinstance(x, int), data))

то увидим неверное значение 8, так как в коллекции data присутствует булево значение True, которое интерпретируется как целое число 1. Здесь лучше применять строгую проверку с использованием функции type():

s = sum(filter(lambda x: type(x) is int, data))

Теперь видим верное значение 7.

С помощью функции isinstance() можно делать и множественные проверки. Например, мы хотим определить, относится ли число к целому или вещественному типу данных? Для этого достаточно записать кортеж из этих типов:

a = 5.5 isinstance(a, (int, float))
isinstance(a, int) or isinstance(a, float)

Но первый вариант короче и потому чаще используется на практике.

Вот так в Python можно выполнять проверку типов данных для произвольных объектов. А также знаете отличия между работой функций isinstance() и type(). До встречи на следующем уроке.

Видео по теме

#1. Первое знакомство с Python Установка на компьютер

#2. Варианты исполнения команд. Переходим в PyCharm

#3. Переменные, оператор присваивания, функции type и id

#4. Числовые типы, арифметические операции

#5. Математические функции и работа с модулем math

#6. Функции print() и input(). Преобразование строк в числа int() и float()

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

#8. Введение в строки. Базовые операции над строками

#9. Знакомство с индексами и срезами строк

#11. Спецсимволы, экранирование символов, row-строки

#12. Форматирование строк: метод format и F-строки

#13. Списки — операторы и функции работы с ними

#14. Срезы списков и сравнение списков

#15. Основные методы списков

#16. Вложенные списки, многомерные списки

#17. Условный оператор if. Конструкция if-else

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

#19. Тернарный условный оператор. Вложенное тернарное условие

#21. Операторы циклов break, continue и else

#22. Оператор цикла for. Функция range()

#23. Примеры работы оператора цикла for. Функция enumerate()

#24. Итератор и итерируемые объекты. Функции iter() и next()

#25. Вложенные циклы. Примеры задач с вложенными циклами

#26. Треугольник Паскаля как пример работы вложенных циклов

#27. Генераторы списков (List comprehensions)

#28. Вложенные генераторы списков

#29. Введение в словари (dict). Базовые операции над словарями

#30. Методы словаря, перебор элементов словаря в цикле

#31. Кортежи (tuple) и их методы

#32. Множества (set) и их методы

#33. Операции над множествами, сравнение множеств

#34. Генераторы множеств и генераторы словарей

#35. Функции: первое знакомство, определение def и их вызов

#36. Оператор return в функциях. Функциональное программирование

#37. Алгоритм Евклида для нахождения НОД

#38. Именованные аргументы. Фактические и формальные параметры

#39. Функции с произвольным числом параметров *args и **kwargs

#40. Операторы * и ** для упаковки и распаковки коллекций

#42. Анонимные (lambda) функции

#43. Области видимости переменных. Ключевые слова global и nonlocal

#45. Введение в декораторы функций

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

#47. Импорт стандартных модулей. Команды import и from

#48. Импорт собственных модулей

#49. Установка сторонних модулей (pip install). Пакетная установка

#50. Пакеты (package) в Python. Вложенные пакеты

#51. Функция open. Чтение данных из файла

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

#53. Запись данных в файл в текстовом и бинарном режимах

#55. Функция-генератор. Оператор yield

#56. Функция map. Примеры ее использования

#57. Функция filter для отбора значений итерируемых объектов

#58. Функция zip. Примеры использования

#59. Сортировка с помощью метода sort и функции sorted

#60. Аргумент key для сортировки коллекций по ключу

#61. Функции isinstance и type для проверки типов данных

#62. Функции all и any. Примеры их использования

#63. Расширенное представление чисел. Системы счисления

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

#65. Модуль random стандартной библиотеки

#66. Аннотация базовыми типами

#67. Аннотации типов коллекций

#68. Аннотации типов на уровне классов

#69. Конструкция match/case. Первое знакомство

#70. Конструкция match/case с кортежами и списками

#71. Конструкция match/case со словарями и множествами

#72. Конструкция match/case. Примеры и особенности использования

© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

Как узнать тип переменной Python

Изображение баннера

В Python есть две функции type() и isinstance() с помощью которых можно проверить к какому типу данных относится переменная.

Разница между type() и isinstance()

type() возвращает тип объекта

isinstance() возвращает boolean значение — принадлежит объект данному типу или нет

type()

Встроенная функция type() это самый простой способ выяснить тип объекта. В Python всё является объектом, объекты делятся на изменяемые и неизменяемые .

Вы можете воспользоваться type() следующим образом.

Пример использования type()

В Python четырнадцать типов данных.

Для начала рассмотрим три численных типа (Numeric Types):

  • int (signed integers)
  • float (вещественные числа с плавающей точкой)
  • complex (комплексные числа)

Создайте три переменные разного численного типа и проверьте работу функции:

var_int = 1380 var_float = 3.14 var_complex = 2.0-3.0j print (type(var_int)) print (type(var_float)) print (type(var_complex))

Рассмотрим ещё несколько примеров

# Text Type: var_str = ‘heihei.ru’ # Boolean Type: var_bool = True # Sequence Types: var_list = [ ‘heihei.ru’ , ‘topbicycle.ru’ , ‘urn.su’ ] var_tuple = ( ‘andreyolegovich.ru’ , ‘aredel.com’ ) var_range = range(0,9) print (type(var_str)) print (type(var_bool)) print (type(var_list)) print (type(var_tuple)) print (type(var_range))

Спецификацию функции type() вы можете прочитать на сайте docs.python.org

Команда type

Есть ещё полезная команда type которая решает другую задачу.

С помощью команды type можно, например, определить куда установлен Python.

Подробнее об этом можете прочитать здесь

python3 is hashed (/usr/bin/python3)

python3 is hashed (/usr/bin/python)

isinstance()

Кроме type() в Python есть функция isinstance(), с помощью которой можно проверить не относится ли переменная к какому-то определённому типу.

Иногда это очень удобно, а если нужно — всегда можно на основе isinstance() написать свою функцию.

Пример использования

Создадим пять переменных разного типа и проверим работу функции

var_int = 1380 var_str = ‘heihei.ru’ var_bool = True var_list = [ ‘heihei.ru’ , ‘topbicycle.ru’ , ‘urn.su’ ] var_tuple = ( ‘andreyolegovich.ru’ , ‘aredel.com’ ) if ( isinstance (var_int , int )): print ( f» < var_int >is int» ) else : print ( f» < var_int >is not int» ) if ( isinstance (var_str , str )): print ( f» < var_str >is str» ) else : print ( f» < var_str >is not str» ) if ( isinstance (var_bool , bool )): print ( f» < var_bool >is bool» ) else : print ( f» < var_bool >is not bool» ) if ( isinstance (var_list , list )): print ( f» < var_list >is list» ) else : print ( f» < var_list >is not list» ) if ( isinstance (var_tuple , tuple)): print ( f» < var_tuple >is tuple» ) else : print ( f» < var_tuple >is not tuple» )

1380 is int heihei.ru is str True is bool [‘heihei.ru’, ‘topbicycle.ru’, ‘urn.su’] is list (‘andreyolegovich.ru’, ‘aredel.com’) is tuple

Из isinstance() можно сделать аналог type()

Напишем свою фукнцию по определению типа typeof() на базе isinstance

def typeof(your_var): if ( isinstance (your_var, int)): return ‘int’ elif ( isinstance (your_var, bool)): return ‘bool’ elif ( isinstance (your_var, str)): return ‘str’ elif ( isinstance (your_var, list)): return ‘list’ elif ( isinstance (your_var, tuple)): return ‘tuple’ else : print(«type is unknown»)

Протестируем нашу функцию

Принадлежность к одному из нескольких типов

Если нужно проверить принадлежит ли объект не к какому-то одному, а к группе типов, эти типы можно перечислить в скобках.

Часто бывает нужно проверить является ли объект числом, то есть подойдёт как int, так и float

print ( isinstance ( 2.0 , ( int , float )))

Проверим несколько значений из списка

l3 = [ 1.5 , — 2 , «www.heihei.ru» ] for item in l3: print ( isinstance (item, ( int , float )))

Проверка списка или другого iterable

Часто бывает нужно проверить не одну переменную а целый список, множество, кортеж или какой-то другой объект.

Эту задачу можно решить с помощью isinstance() и функций:

Проверить все ли элементы списка l1 int

l1 = [ 1 , 2 , 3 ] if all ( map ( lambda p: isinstance (p, int ), l1)): print ( «all int in l1» )

Проверить несколько списков на int и float

l1 = [ 3 , — 4.0 , 5.5 , — 6.2 ] l2 = [ 1 , — 2 , «test» ] def verif_list (l): return ( all ( map ( lambda p: isinstance (p, ( int , float )), l))) if __name__ == «__main__» : print (verif_list(l1)) print (verif_list(l2))

Помимо isinstance() в Python есть функция issubclass() с помощью которой проверяется является один класс производным от другого.

В других языках

  • Си: такой функции нет.
  • C++: похожую задачу решает функция typeid()

Источник

Читайте также:  Python exit main program
Оцените статью