Как узнать тип переменной Python
Введение | |
Разница между type() и isinstance() | |
type() | |
Пример использования type() | |
isinstance() | |
Пример использования isinstance() | |
Проверка списка или другого iterable | |
В других языках | |
Похожие статьи |
Введение
В Python есть две функции type() и isinstance() с помощью которых можно проверить к какому типу данных относится переменная.
Разница между type() и isinstance()
type() возвращает тип объекта
isinstance() возвращает boolean значение - принадлежит объект данному типу или нет
type()
Встроенная функция type() это самый простой способ выяснить тип объекта. В Python всё является объектом, объекты делятся на
изменяемые и неизменяемые
.
Вы можете воспользоваться type() следующим образом.
print(type(variable))
Пример использования 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))
<class 'int'> <class 'float'> <class 'complex'>
Рассмотрим ещё несколько примеров
# Text Type:
var_str = 'heihei.ru'
# Boolean Type:
var_bool = True
# Sequence Types:
var_list = ['heihei.ru','topbicycle.ru','eth1.ru']
var_tuple = ('eth1.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))
<class 'str'> <class 'bool'> <class 'list'> <class 'tuple'> <class 'range'>
Спецификацию функции type() вы можете прочитать на сайте docs.python.org
Команда type
Есть ещё полезная команда type которая решает другую задачу.
С помощью команды
type
можно, например, определить куда установлен Python.
Подробнее об этом можете прочитать
здесь
type python3
python3 is hashed (/usr/bin/python3)
type python
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','eth1.ru']
var_tuple = ('eth1.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', 'eth1.ru'] is list ('eth1.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")
Протестируем нашу функцию
print(f"var_list is {typeof(var_list)}")
var_list is list
Принадлежность к одному из нескольких типов
Если нужно проверить принадлежит ли объект не к какому-то одному, а к группе типов, эти типы можно
перечислить в скобках.
Часто бывает нужно проверить является ли объект числом, то есть подойдёт как
int, так и float
print(isinstance(2.0, (int, float)))
True
Проверим несколько значений из списка
l3 = [1.5, -2, "www.heihei.ru"] for item in l3: print(isinstance(item, (int, float)))
True
True
False
Проверка списка или другого iterable
Часто бывает нужно проверить не одну переменную а целый список, множество, кортеж или какой-то другой объект.
Эту задачу можно решить с помощью isinstance() и функций:
Проверить все ли элементы списка l1 int
l1 = [1, 2, 3] if all(map(lambda p: isinstance(p, int), l1)): print("all int in l1")
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))
True
False
Помимо isinstance() в Python есть функция issubclass() с помощью которой проверяется является один класс производным от другого.
В других языках
- Си : такой функции нет.
-
C++
:
похожую задачу решает функция
typeid()
Читать статью: «Как определить тип переменной C++»
- C# : есть похожая функция GetType()
- Go : функция typeof() доступна из библиотеки reflect
- Java : оператор instanceof
-
PHP
:
эту задачу решает
gettype()
Читать статью: «Как определить тип переменной PHP»
C | |
C++ | |
Go | |
Groovy | |
Java | |
JavaScript | |
PHP | |
Python | |
Ruby | |
.NET/C# | |
Thrift | |
Теория Программирования |