Как проверить число: int или float в Python?

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы самым быстрым образом определить относится ли переменная x к типу int или float, в Python предусмотрена функция isinstance():

Python
Скопировать код
x = 42.0  # главный ответ всегда 42
is_int = isinstance(x, int)  # False, потому что это вещественное число
is_float = isinstance(x, float)  # True, так как число вещественное
Кинга Идем в IT: пошаговый план для смены профессии

Учет всех числовых типов:двойная проверка

Python способен работать с другими числовыми типами кроме целых и вещественных чисел, в том числе и с комплексными и рациональными.

Python
Скопировать код
import numbers

# Python прекрасно обрабатывает даже очень большие числа
n = 12345678901234567890
is_long_int = isinstance(n, numbers.Integral)  # True для больших целых чисел в Python 2.x

Класс numbers.Integral используется для проверки принадлежности числа к целочисленному типу, включая тип long в Python 2.x.

Python
Скопировать код
# Вещественные числа – тоже не проблема для Python
n = 987.65 
is_real = isinstance(n, numbers.Real)  # True как для int, так и для float

Благодаря numbers.Real, мы можем выяснить, является ли переменная вещественным числом, сюда относятся типы int и float.

Изучаем другие методы

Сопоставление остатка от деления

Можем использовать операцию остатка от деления для определения, является ли число целым, но представленным в формате числа с плавающей точкой:

Python
Скопировать код
n = 18.0
is_integer_in_disguise = n % 1 == 0 
# True для чисел с плавающей точкой, которые представляют собой целые числа

Изучив остаток от деления на единицу, можно определить, имеется ли у числа дробная часть.

Уловка с использованием блока try-except

В определенных случаях, когда весь код имеет значение, мы можем отслеживать ошибки обработки типов с помощью блока try-except:

Python
Скопировать код
num = '10.0'
try:
    hero = int(num)
except ValueError:
    print(f"{num} – это либо вещественное число, либо целое число, представленное в строковом формате!")

Попытавшись преобразовать строку в значение типа int, мы можем оценить, не скрывается ли за строкой число с плавающей точкой. Ошибка ValueError будет указывать на числа, которые не могут быть представлены типом int.

Погружаемся в природу чисел

Можно провести аналогию между числами и сосудами, которые заполнены жидкостью – либо точно до краев, либо с переливом:

Markdown
Скопировать код
| Сосуд (число) | Точное количество (Int)? | Перелив (Float)?     |
| ------------- | ------------------------ | -------------------- |
| Ведро '7'     | Да. Вместимость – **7**  | Без переливов 🪣✅   |
| Кружка '7.5'  | Нет                      | Переливается 0.5 🥤💧 |

В Python при помощи проверки типов мы в состоянии определить, к какому типу относится данное число:

Python
Скопировать код
num = 7  
isinstance(num, int)  # 'ведро', заполненное до краев. Идеальный `int`. 🪣✅

num = 7.5  
isinstance(num, float)  # В 'кружке' перелив. Очевидный `float`. 🥤💧

Тип int можно представить как ведро, а float как кружку, из которой переливается жидкость.

Уточнение проверки типов

Мы можем оптимизировать код, обернув проверку типов в функцию. Это делает код более чистым и гибким для дальнейшего использования, что будет полезно для каждого разработчика:

Python
Скопировать код
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 этого вполне достаточно.

Определение типа числа влияет на поведение операций

Знание типа переменной имеет не только теоретическое, но и практическое значение, т.к. может существенно определять результаты различных операций, например, округления и вычислительной точности. Так что необходимо быть внимательным, чтобы избежать ошибок при проведении математических расчетов.

Полезные материалы

  1. Встроенные функции — документация Python 3.12.2 — коллекция встроенных функций Python с функцией isinstance().
  2. 15. Проблемы и ограничения арифметики с плавающей точкой — документация Python 3.12.2 — будьте осторожны, арифметика с плавающей точкой может скрывать в себе потенциальные проблемы.
  3. Разоблачение статических, классовых и методов экземпляров Python – Real Python — руководство по основам Python в контексте понимания экземпляров и типов.
  4. Встроенные функции — документация Python 3.12.2 — перечень встроенных функций Python и функции type().
  5. Работа с числами в Python — обзор числовых типов в Python от W3Schools.
  6. Educative: интерактивные курсы для разработчиков — присоединяйтесь к миру числовых типов в Python, где вы узнаете больше о различных объектах и их типах.