W3docs

Числа в 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

Арифметика целых чисел

python— editable, runs on the server

Обратите внимание, что / всегда возвращает 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

Арифметика чисел с плавающей точкой

python— editable, runs on the server

Точность чисел с плавающей точкой

Поскольку числа 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— editable, runs on the server

Комплексные числа нельзя сравнивать с помощью < или >, поскольку на комплексной плоскости нет естественного порядка. Поддерживаются только операторы == и !=.

Преобразование типов

Python не повышает типы неявно при присваивании, однако арифметика между разными числовыми типами подчиняется чётко определённым правилам:

ВыражениеТип результата
int + intint
int + floatfloat
float + complexcomplex
int + complexcomplex

Явное преобразование между типами выполняется с помощью встроенных конструкторов:

# 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 — подробности преобразования типов.

Практика

Практика
Which of the following types of numbers are supported in Python?
Which of the following types of numbers are supported in Python?
Was this page helpful?