Числа в Python
Три числовых типа Python — int, float и complex: арифметика, преобразование типов, точность и математические функции.
В Python есть три встроенных числовых типа: целые числа (int), числа с плавающей точкой (float) и комплексные числа (complex). На этой странице рассматривается, как работает каждый тип, как выполнять с ними арифметику, распространённые подводные камни, преобразование типов и математические функции из стандартной библиотеки.
Целые числа
Целое число — это число без дробной части: положительное, отрицательное или ноль. В Python целые числа имеют неограниченную точность: нет фиксированного максимального размера, как в C или Java. Python без проблем работает с числами, содержащими сотни цифр.
x = 10
y = -5
z = 0
# Python integers have no fixed size limit
big = 2 ** 100
print(big) # 1267650600228229401496703205376Арифметика целых чисел
Обратите внимание, что / всегда возвращает float, даже если результат является целым числом (6 / 2 даёт 3.0). Используйте //, когда нужен целочисленный результат.
Целочисленные литералы: двоичные, восьмеричные и шестнадцатеричные
Python принимает целочисленные литералы в четырёх системах счисления. Все четыре создают один и тот же объект int — префикс лишь указывает Python, как интерпретировать цифры.
decimal = 255 # base 10 — no prefix
binary = 0b11111111 # base 2 — prefix 0b
octal = 0o377 # base 8 — prefix 0o
hexadecimal = 0xFF # base 16 — prefix 0x
print(decimal, binary, octal, hexadecimal)
# 255 255 255 255
# Convert an int back to a string in a given base
print(hex(255)) # '0xff'
print(bin(255)) # '0b11111111'
print(oct(255)) # '0o377'Проверка типа
Используйте type(), чтобы узнать тип значения, или isinstance(), чтобы проверить принадлежность к типу:
print(type(42)) # <class 'int'>
print(isinstance(42, int)) # TrueЧисла с плавающей точкой
float — это число с десятичной точкой (или показателем степени). Значения float в Python являются 64-битными числами двойной точности по стандарту IEEE 754, что обеспечивает примерно 15–17 значимых десятичных цифр точности.
x = 10.5
y = -5.2
z = 0.0
e = 1.5e3 # scientific notation — same as 1500.0Арифметика чисел с плавающей точкой
Точность чисел с плавающей точкой
Поскольку числа float хранятся в двоичном виде, некоторые десятичные дроби не могут быть представлены точно. Это свойство арифметики IEEE 754, а не ошибка Python:
print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # FalseКогда требуется точная десятичная арифметика (например, в финансовых расчётах), используйте модуль decimal из стандартной библиотеки вместо float.
Округление и полезные операции с float
import math
print(round(3.14159, 2)) # 3.14 — round to 2 decimal places
print(math.floor(3.7)) # 3 — largest integer <= value
print(math.ceil(3.2)) # 4 — smallest integer >= value
print(math.sqrt(16)) # 4.0 — square root
print(abs(-7.5)) # 7.5 — absolute valueКомплексные числа
Комплексное число имеет вещественную часть и мнимую часть. В Python (следуя инженерному соглашению) мнимая единица обозначается j или J, а не i.
x = 10 + 5j
y = -5 + 3j
z = 0 + 0j # equivalent to complex(0, 0)
w = complex(2, -3) # constructor: real=2, imag=-3Доступ к вещественной и мнимой частям
z = 3 + 4j
print(z.real) # 3.0
print(z.imag) # 4.0
print(abs(z)) # 5.0 — magnitude: sqrt(3^2 + 4^2)Арифметика комплексных чисел
Комплексные числа нельзя сравнивать с помощью < или >, поскольку на комплексной плоскости нет естественного порядка. Поддерживаются только операторы == и !=.
Преобразование типов
Python не повышает типы неявно при присваивании, однако арифметика между разными числовыми типами подчиняется чётко определённым правилам:
| Выражение | Тип результата |
|---|---|
int + int | int |
int + float | float |
float + complex | complex |
int + complex | complex |
Явное преобразование между типами выполняется с помощью встроенных конструкторов:
# int → float
print(float(42)) # 42.0
# float → int (truncates toward zero, no rounding)
print(int(3.9)) # 3
print(int(-3.9)) # -3
# str → int or float
print(int("100")) # 100
print(float("3.14")) # 3.14
# int → complex
print(complex(5)) # (5+0j)Обратите внимание, что при преобразовании float в int происходит усечение, а не округление. Если вам нужно округление, сначала используйте round().
Модуль math
Модуль math предоставляет дополнительные математические функции для вещественных чисел.
import math
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
print(math.log(math.e)) # 1.0 — natural log
print(math.log10(1000)) # 3.0
print(math.pow(2, 10)) # 1024.0 — float result (use ** for int result)
print(math.factorial(5)) # 120
print(math.gcd(12, 8)) # 4Для операций с комплексными числами используйте cmath вместо math:
import cmath
z = 1 + 1j
print(cmath.phase(z)) # 0.7853981633974483 — angle in radians (π/4)
print(cmath.polar(z)) # (1.4142135623730951, 0.7853981633974483) — (r, θ)Когда использовать каждый тип
| Сценарий использования | Рекомендуемый тип |
|---|---|
| Подсчёт, индексация, побитовые операции | int |
| Измерения, научные вычисления | float |
| Обработка сигналов, электротехника | complex |
| Финансовые расчёты, требующие точности | decimal.Decimal |
Смежные темы: глава Переменные Python — о том, как числа хранятся в переменных; глава Операторы Python — полный набор числовых операторов; Приведение типов в Python — подробности преобразования типов.