abs(x)
x - число, может быть целым числом, числом с плавающей запятой или комплексным числом.x, переданного в качестве аргумента.abs():Функция abs() используется для возврата абсолютного значения числа.
abs() принимает только один аргумент, число, абсолютное значение которого должно быть возвращено. Аргумент может быть целым числом, числом с плавающей запятой или комплексным числом.
abs() возвращает абсолютное значение в виде целого числа или числа с плавающей запятой.abs() возвращает только часть величины, которая также может быть числом с плавающей запятой.abs()Ниже - практические "рецепты", где функция abs() в Python реально помогает писать короче, понятнее и (часто) быстрее за счёт использования встроенных примитивов.
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
В задачах геометрии/кластеризации/эвристик:
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).abs(a-b) < eps допустимо, но для относительных допусков чаще лучше math.isclose.abs() работает не только с числами: любой объект с __abs__ будет поддержан.