Как проверить число: int или float в Python?
Быстрый ответ
Для того чтобы самым быстрым образом определить относится ли переменная x
к типу int или float, в Python предусмотрена функция isinstance():
x = 42.0 # главный ответ всегда 42
is_int = isinstance(x, int) # False, потому что это вещественное число
is_float = isinstance(x, float) # True, так как число вещественное
Учет всех числовых типов:двойная проверка
Python способен работать с другими числовыми типами кроме целых и вещественных чисел, в том числе и с комплексными и рациональными.
import numbers
# Python прекрасно обрабатывает даже очень большие числа
n = 12345678901234567890
is_long_int = isinstance(n, numbers.Integral) # True для больших целых чисел в Python 2.x
Класс numbers.Integral
используется для проверки принадлежности числа к целочисленному типу, включая тип long в Python 2.x.
# Вещественные числа – тоже не проблема для Python
n = 987.65
is_real = isinstance(n, numbers.Real) # True как для int, так и для float
Благодаря numbers.Real
, мы можем выяснить, является ли переменная вещественным числом, сюда относятся типы int и float.
Изучаем другие методы
Сопоставление остатка от деления
Можем использовать операцию остатка от деления для определения, является ли число целым, но представленным в формате числа с плавающей точкой:
n = 18.0
is_integer_in_disguise = n % 1 == 0
# True для чисел с плавающей точкой, которые представляют собой целые числа
Изучив остаток от деления на единицу, можно определить, имеется ли у числа дробная часть.
Уловка с использованием блока try-except
В определенных случаях, когда весь код имеет значение, мы можем отслеживать ошибки обработки типов с помощью блока try-except
:
num = '10.0'
try:
hero = int(num)
except ValueError:
print(f"{num} – это либо вещественное число, либо целое число, представленное в строковом формате!")
Попытавшись преобразовать строку в значение типа int, мы можем оценить, не скрывается ли за строкой число с плавающей точкой. Ошибка ValueError будет указывать на числа, которые не могут быть представлены типом int.
Погружаемся в природу чисел
Можно провести аналогию между числами и сосудами, которые заполнены жидкостью – либо точно до краев, либо с переливом:
| Сосуд (число) | Точное количество (Int)? | Перелив (Float)? |
| ------------- | ------------------------ | -------------------- |
| Ведро '7' | Да. Вместимость – **7** | Без переливов 🪣✅ |
| Кружка '7.5' | Нет | Переливается 0.5 🥤💧 |
В Python при помощи проверки типов мы в состоянии определить, к какому типу относится данное число:
num = 7
isinstance(num, int) # 'ведро', заполненное до краев. Идеальный `int`. 🪣✅
num = 7.5
isinstance(num, float) # В 'кружке' перелив. Очевидный `float`. 🥤💧
Тип int
можно представить как ведро, а float
как кружку, из которой переливается жидкость.
Уточнение проверки типов
Мы можем оптимизировать код, обернув проверку типов в функцию. Это делает код более чистым и гибким для дальнейшего использования, что будет полезно для каждого разработчика:
def is_integer(n):
return isinstance(n, numbers.Integral) # Проверяем, принадлежит ли число к определённому типу. Здесь мы рассматриваем только целые числа.
print(is_integer(2)) # True
print(is_integer(2.5)) # False
Учитываем версию Python
Нельзя забывать о специфике работы с целочисленными типами в разных версиях Python. Итак, Python 2.x и Python 3.x, это как сочетание Classic и Diet Coke:
- Python 2.x:
isinstance(n, (int, long, float))
- Python 3.x:
isinstance(n, (int, float))
# Для проверкиint
иfloat
в Python 3.x этого вполне достаточно.
Определение типа числа влияет на поведение операций
Знание типа переменной имеет не только теоретическое, но и практическое значение, т.к. может существенно определять результаты различных операций, например, округления и вычислительной точности. Так что необходимо быть внимательным, чтобы избежать ошибок при проведении математических расчетов.
Полезные материалы
- Встроенные функции — документация Python 3.12.2 — коллекция встроенных функций Python с функцией
isinstance()
. - 15. Проблемы и ограничения арифметики с плавающей точкой — документация Python 3.12.2 — будьте осторожны, арифметика с плавающей точкой может скрывать в себе потенциальные проблемы.
- Разоблачение статических, классовых и методов экземпляров Python – Real Python — руководство по основам Python в контексте понимания экземпляров и типов.
- Встроенные функции — документация Python 3.12.2 — перечень встроенных функций Python и функции
type()
. - Работа с числами в Python — обзор числовых типов в Python от W3Schools.
- Educative: интерактивные курсы для разработчиков — присоединяйтесь к миру числовых типов в Python, где вы узнаете больше о различных объектах и их типах.