В Python для чисел, массивов и собственных объектов используется встроенная функция
abs(). В этом кратком руководстве вы узнаете:* Как реализовать абсолютную функцию вручную.
* Как работает
abs() с разными типами данных.* Как расширить
abs() для NumPy, pandas и своих классов.1. Самостоятельная реализация
def absolute_value(x):
return x if x >= 0 else -x
Или через
max:
def absolute_value(x):
return max(x, -x)
Через корень:
def absolute_value(x):
return (x**2) ** 0.5 # возвращает float
Но проще и эффективнее пользоваться
abs().2. Встроенная функция
abs()🔸Для целых и вещественных чисел сохраняет тип:
abs(-5) # 5
abs(-5.2) # 5.2
🔸Для комплексных чисел возвращает модуль:
z = 3 + 4j
abs(z) # 5.0
🔸Для
Fraction и Decimal тоже работает «из коробки»:
from fractions import Fraction
abs(Fraction(-3, 4)) # Fraction(3, 4)
from decimal import Decimal
abs(Decimal("-0.75")) # Decimal('0.75')
3. Применение к коллекциям
Если у вас список чисел, используйте списковое включение или
map:
temps = [1, -5, 3, -2]
[abs(x) for x in temps] # [1, 5, 3, 2]
list(map(abs, temps)) # [1, 5, 3, 2]
4. NumPy и pandas
🔸NumPy:
import numpy as np
arr = np.array([-1, -4, 0, 7])
abs(arr) # array([1, 4, 0, 7])
🔸pandas:
import pandas as pd
data = pd.Series([-2, 5, -3])
abs(data) # Series([2, 5, 3])
5. Собственные классы
Чтобы
abs() работал для объектов вашего класса, определите метод .__abs__():
import math
class Vector:
def __init__(self, *coords):
self.coords = coords
def __abs__(self):
return math.hypot(*self.coords)
v = Vector(3, 4)
abs(v) # 5.0
Вывод:
🔸Для чисел
abs() – оптимальный выбор.🔸Для списков применяйте
map или генератор списка.🔸NumPy и pandas позволяют вызывать
abs() прямо на массивах и DataFrame.🔸Для собственных типов реализуйте
.__abs__().https://realpython.com/python-absolute-value/
#python
👉 @python_real
