Чтобы получить модуль числа в Python, вызовите встроенную функцию abs(): abs(-7) вернёт 7, а abs(3.5) вернёт 3.5. Импортировать ничего не нужно, функция доступна сразу после запуска интерпретатора. Она работает с целыми и дробными числами, с комплексными, а ещё с типами Decimal и Fraction.
Ниже разберём, что возвращает abs() для каждого типа, чем от неё отличается math.fabs(), как взять модуль сразу у массива в NumPy и где новички чаще всего ошибаются. Остальные базовые команды языка собраны в шпаргалке по командам Python для начинающих.
Как работает abs(): синтаксис и первые примеры

Запись короткая: abs(x), в скобках число, переменная или целое выражение. В документации Python сказано, что функция возвращает абсолютное значение числа, а если число комплексное, его модуль (magnitude).
Как найти модуль числа:
- Передайте число или переменную в скобки:
abs(-7)илиabs(x). - Сохраните результат, если он понадобится дальше:
distance = abs(x). Сама переменнаяxпри этом не меняется. - Используйте результат в выражении:
abs(a - b)даёт расстояние между двумя числами без оглядки на то, какое из них больше.
print(abs(-7))
print(abs(3.5))
print(abs(-0.0))
print(abs(0))
a, b = 15, 42
print(abs(a - b))
7
3.5
0.0
0
27
Тип результата повторяет тип аргумента: из целого числа получается целое, из дробного выходит дробное. Ноль со знаком минус -0.0 превращается в обычный 0.0.
Что возвращает abs() для разных типов
Функция встроенная, поэтому одна и та же запись работает с несколькими числовыми типами. Вот что она вернёт для каждого:
| Аргумент | Тип | Результат |
|---|---|---|
abs(-7) |
int |
7 |
abs(-7.25) |
float |
7.25 |
abs(3 + 4j) |
complex |
5.0 |
abs(Decimal("-12.50")) |
Decimal |
12.50 |
abs(Fraction(-3, 4)) |
Fraction |
3/4 |
abs(True) |
bool |
1 |
abs(float("-inf")) |
float |
inf |
Ограничения на размер у целых чисел нет: abs(-10**30) спокойно вернёт число из 31 цифры. Про то, как устроен сам тип int, подробно рассказано в статье о целых числах в Python.
Модуль комплексного числа
У комплексного числа a + bj модуль считается как длина вектора: корень из суммы квадратов a и b. Поэтому результат всегда float, даже если обе части целые.
print(abs(3 + 4j))
print(abs(-2 - 1j))
5.0
2.23606797749979
Для числа -2 - 1j это корень из пяти. Как ещё извлекать корни в питоне, разобрано в статье о корне в Python.
abs() или math.fabs(): в чём разница
В модуле math есть похожая функция math.fabs(). Она тоже возвращает абсолютное значение, но принимает только вещественные числа и всегда отдаёт float:
abs() |
math.fabs() |
|
|---|---|---|
| Нужен импорт | нет | import math |
-7 |
7 |
7.0 |
-7.25 |
7.25 |
7.25 |
3 + 4j |
5.0 |
TypeError |
Свой класс с __abs__ |
работает | не работает |
import math
print(math.fabs(-7))
print(math.fabs(-7.25))
math.fabs(3 + 4j)
7.0
7.25
TypeError: must be real number, not complex
В обычном коде берите abs(): она сохраняет тип и не требует импорта. math.fabs() пригодится, когда дальше нужен строго float, например чтобы целое не смешалось с дробными в одном столбце вычислений. Чем int отличается от float и какие ещё числовые типы есть в языке, видно в таблице типов данных Python.
Модуль числа для массива в NumPy
Встроенная abs() не принимает список: abs([1, -2]) падает с TypeError. Для списка подойдёт генератор, а для больших массивов — NumPy.
nums = [1, -2, 3, -4]
print([abs(n) for n in nums])
print(list(map(abs, nums)))
[1, 2, 3, 4]
[1, 2, 3, 4]
В NumPy есть функция np.absolute() и её короткое имя np.abs(). Обе, как указано в документации NumPy, считают модуль поэлементно, то есть для каждого значения массива сразу.
import numpy as np
arr = np.array([-3, 5, -1.5, 0])
print(np.abs(arr))
print(np.abs(np.array([3 + 4j, -1 + 0j])))
[3. 5. 1.5 0. ]
[5. 1.]
Встроенная abs(arr) на массиве NumPy тоже сработает и вернёт тот же массив модулей. Если массив только складываете, посмотрите как суммировать список в Python через sum() и NumPy.
Типовые задачи с модулем числа

Сама по себе abs() простая, а пользу приносит в связке с min(), sorted() и сравнениями.
Найти число, ближайшее к нулю или к цели
Передайте abs в параметр key функции min(). Сравнение пойдёт по модулю, а вернётся исходное число со знаком.
nums = [12, -3, 7, 25, -9]
print(min(nums, key=abs))
target = 10
print(min(nums, key=lambda x: abs(x - target)))
-3
12
Во второй строке ищем число, ближайшее к десяти. У 12 расстояние до цели 2, у 7 уже 3, поэтому выигрывает 12.
Отсортировать по модулю
print(sorted(nums, key=abs))
print(sum(abs(n) for n in nums))
[-3, 7, -9, 12, 25]
56
Знаки остались на месте, порядок задан модулями. Чем sorted() отличается от метода sort(), разобрано в статье о сортировке списков.
Сравнить дробные числа
Сравнивать float через == рискованно: 0.1 + 0.2 == 0.3 даёт False. Разницу можно проверить через модуль и маленький допуск, а можно взять готовую math.isclose(), которая делает то же самое.
import math
print(0.1 + 0.2 == 0.3)
print(abs((0.1 + 0.2) - 0.3) < 1e-9)
print(math.isclose(0.1 + 0.2, 0.3))
False
True
True
Почему так происходит с дробями, объясняется в статье об операторах Python, в разделе про 0.1 + 0.2.
Другие математические функции Python
Модуль числа входит в небольшой набор встроенных функций для расчётов. Все они работают без импорта, а за корнями, логарифмами и тригонометрией нужно идти в math. Потренироваться на них можно в 30 задачах по Python для начинающих.
| Функция | Что делает | Пример → результат |
|---|---|---|
abs(x) |
модуль числа | abs(-7) → 7 |
round(x, n) |
округление до n знаков |
round(3.14159, 2) → 3.14 |
pow(x, y) |
степень, то же что x ** y |
pow(2, 10) → 1024 |
pow(x, y, m) |
степень по модулю m |
pow(3, 4, 5) → 1 |
divmod(a, b) |
частное и остаток парой | divmod(17, 5) → (3, 2) |
min(), max() |
наименьшее и наибольшее | min(4, -9, 2) → -9 |
sum() |
сумма элементов | sum([1.5, -2, 3]) → 2.5 |
math.sqrt(x) |
квадратный корень | math.sqrt(16) → 4.0 |
math.ceil(x), math.floor(x) |
округление вверх и вниз | math.floor(-2.1) → -3 |
math.hypot(x, y) |
длина вектора | math.hypot(3, 4) → 5.0 |
math.prod() |
произведение элементов | math.prod([2, 3, 4]) → 24 |
Сюрпризы чаще всего приносит round(). По документации, если два варианта одинаково близки, округление идёт к чётному: round(0.5) и round(-0.5) дают 0, а round(1.5) даёт 2. Там же разобран round(2.675, 2): он возвращает 2.67 вместо ожидаемых 2,68, потому что большинство десятичных дробей нельзя точно записать в float. Если нужно округлять только вверх, смотрите разбор math.ceil. Остаток от деления и divmod() подробно описаны в статье об операторе %.
Как abs() работает со своими классами
Когда вы пишете abs(obj), Python вызывает у объекта метод __abs__(). Значит, модуль можно определить и для собственного типа, например для вектора на плоскости.
class Vector:
def __init__(self, x, y):
self.x, self.y = x, y
def __abs__(self):
return (self.x ** 2 + self.y ** 2) ** 0.5
print(abs(Vector(3, 4)))
5.0
Так же устроены Decimal, Fraction и массивы NumPy: у каждого свой __abs__(). Если классы пока в новинку, начните со статьи об ООП простыми словами.
Частые ошибки и что с ними делать

TypeError: bad operand type for abs(): ‘str’
Число пришло строкой, обычно из input() или из файла. Строку сначала нужно перевести в число.
print(abs(int("-5")))
5
Как безопасно читать числа с клавиатуры, разобрано в статье про int(input()).
Переменная после abs() осталась отрицательной
Функция возвращает новое значение и не трогает исходную переменную. Строка abs(x) без присваивания ничего не меняет.
x = -5
abs(x)
print(x)
x = abs(x)
print(x)
-5
5
abs() вернула отрицательное число в NumPy
У массивов NumPy фиксированный размер ячейки. В типе int8 помещаются числа от −128 до 127, и для −128 положительной пары нет. Поэтому модуль возвращает то же −128, и ошибки при этом не будет.
import numpy as np
i8 = np.array([-128, -5, 100], dtype=np.int8)
print(np.abs(i8))
print(np.abs(i8.astype(np.int16)))
[-128 5 100]
[128 5 100]
Решение: перед расчётом переведите массив в более широкий тип через astype(). У встроенного int такой проблемы нет, его размер не ограничен.
Модуль нужен со знаком другого числа
Иногда нужна величина одного числа и знак другого. Писать условие не нужно: для этого есть math.copysign(). Например, math.copysign(5, -2) вернёт -5.0, а -abs(8) даст гарантированно отрицательное -8.
Где освоить Python системно
Функция abs() закрывает одну маленькую задачу. Когда таких задач становится много, имеет смысл один раз пройти типы данных, функции и библиотеки вроде NumPy по программе с практикой и проверкой кода. В подборке ниже курсы по Python с ценами и сроками, их можно сравнить на одной странице. Все программы собраны в каталоге курсов Python.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия «Python-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 000 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 118 754 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Профессия Python-разработчик Перейти на сайт курса | 140 040 ₽ | 3890 ₽/мес. | 10 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




