Сообщить об ошибке.

Функция abs() в Python, абсолютное значение числа

Позволяет получить абсолютное значение числа

Синтаксис:

abs(x)

Параметры:

  • x - число, может быть целым числом, числом с плавающей запятой или комплексным числом.

Возвращаемое значение:

  • абсолютное значение числа x, переданного в качестве аргумента.

Описание abs():

Функция abs() используется для возврата абсолютного значения числа.

abs() принимает только один аргумент, число, абсолютное значение которого должно быть возвращено. Аргумент может быть целым числом, числом с плавающей запятой или комплексным числом.

Рецепты эффективного использования функции abs()

Ниже - практические "рецепты", где функция abs() в Python реально помогает писать короче, понятнее и (часто) быстрее за счёт использования встроенных примитивов.

Абсолютная величина числа (int/float) - базово, но с нюансами

abs(-7) # 7
abs(3.14) # 3.14
abs(-0.0) # 0.0 (в float может быть -0.0, abs нормализует)

Если вам строго нужен float, иногда удобнее math.fabs(x) (он всегда возвращает float), но для обычных задач abs() универсальнее.

Модуль комплексного числа = длина (евклидова норма)

Для complex abs(z) возвращает модуль: sqrt(re2 + im2).

z = 3 + 4j
abs(z) # 5.0

Это удобно для:

  • сравнения "силы" сигнала/вектора в комплексной форме,
  • проверки близости к нулю по модулю.

"Насколько далеко" два числа друг от друга (ошибка/дельта)

Классика для допусков и погрешностей:

a, b = 10.0, 10.0000003
if abs(a - b) < 1e-6:
    print("достаточно близко")

Для вещественных чисел, если нужен корректный относительный/абсолютный допуск - используйте стандартный math.isclose():

import math
math.isclose(a, b, rel_tol=1e-9, abs_tol=1e-6)

Длина шага / модуль приращения в алгоритмах

Например, критерий остановки итераций:

prev = x
x = step(x)
if abs(x - prev) < eps:
    break

Это один из самых частых "правильных" сценариев: абсолютное изменение как метрика сходимости.

Сортировка "по близости к цели" через key=abs

Сортировать числа по расстоянию до нуля (или до произвольной точки):

nums = [5, -1, 3, -4, 2]
sorted(nums, key=abs) 
# [-1, 2, 3, -4, 5]

По близости к значению target:

target = 10
sorted(nums, key=lambda x: abs(x - target))

Нахождение ближайшего элемента: min(..., key=...)

Эффективный и читаемый паттерн:

values = [8.9, 10.2, 9.95, 12.0]
target = 10.0
closest = min(values, key=lambda x: abs(x - target)) 
# 9.95

"Манхэттенская" дистанция (L1) в 2D/ND

В задачах геометрии/кластеризации/эвристик:

p = (2, 5)
q = (-1, 1)
l1 = abs(p[0] - q[0]) + abs(p[1] - q[1]) 
# 7

Для N-мерного случая:

l1 = sum(abs(a - b) for a, b in zip(p, q))

Модуль как простая нормализация "знака" и работа с направлением

Иногда нужно отделить "величину" от направления:

x = -13
magnitude = abs(x) # 13
sign = 0 if x == 0 else (1 if x > 0 else -1)

(Обратите внимание: знак нельзя получить через abs() напрямую, но abs() помогает выделить модуль.)

Окна/пороговые условия ("в пределах радиуса")

Удобно в фильтрации:

xs = [-3, -1, 0, 2, 5]
within_2 = [x for x in xs if abs(x) <= 2] 
# [-1, 0, 2]

Использование abs() с пользовательскими типами (__abs__)

abs(obj) вызывает obj.__abs__(). Это "правильный" интерфейс для собственных числовых классов.

class Vector2:
    def __init__(self, x, y):
        self.x, self.y = x, y
    def __abs__(self):
        return (self.x * self.x + self.y * self.y) ** 0.5

v = Vector2(3, 4)
abs(v) 
# 5.0

Рецепт полезен, если вы строите доменную математику (векторы, интервалы, величины с единицами и т.п.).

Частые ошибки/тонкости

  • abs() не "обрезает" значение до диапазона; для clamp используйте явный код: min(max(x, lo), hi).
  • Для сравнения float на равенство abs(a-b) < eps допустимо, но для относительных допусков чаще лучше math.isclose.
  • abs() работает не только с числами: любой объект с __abs__ будет поддержан.