Я заметил, что в python есть два похожих метода поиска абсолютного значения числа:
Первый
abs(-5)
Второй
import math
math.fabs(-5)
Чем отличаются эти методы?
math.fabs()
преобразует свой аргумент в float, если может (если не может, генерирует исключение). Затем он принимает абсолютное значение и возвращает результат в виде числа с плавающей точкой.
Помимо чисел с плавающей запятой, abs()
также работает с целыми и комплексными числами. Его возвращаемый тип зависит от типа его аргумента.
In [7]: type(abs(-2))
Out[7]: int
In [8]: type(abs(-2.0))
Out[8]: float
In [9]: type(abs(3+4j))
Out[9]: float
In [10]: type(math.fabs(-2))
Out[10]: float
In [11]: type(math.fabs(-2.0))
Out[11]: float
In [12]: type(math.fabs(3+4j))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/npe/<ipython-input-12-8368761369da> in <module>()
----> 1 type(math.fabs(3+4j))
TypeError: can't convert complex to float
abs
работает не только с целыми числами и числами с плавающей запятой, и тип результата не всегда совпадает с аргументом, напримерabs(3+4j)
.fabs
занимает больше времени из-за его всегда плавающего характера, и вы получите правильный ответ!__builtin__.abs()
успешно применить?__abs__
магический методИзменить: как предложил @aix, лучший (более справедливый) способ сравнить разницу в скорости:
Таким образом, кажется,
abs()
чтоfabs()
у целых чисел есть только небольшое преимущество в скорости . Для поплавковabs()
иfabs()
демонстрируйте аналогичную скорость.В дополнение к тому, что сказал @aix, еще одна вещь, которую следует учитывать, - это разница в скорости:
Так
abs()
быстрее чемmath.fabs()
.источник
from math import fabs
точно, и попробовать-5.0
для обеих сторон .math.fabs()
всегда возвращает число с плавающей запятой, аabs()
может возвращать целое число.источник
abs
может возвращать любой тип, в зависимости от__abs__
специального метода вызываемого типа.abs()
: Возвращает абсолютное значение в соответствии с аргументом, т.е. если аргумент int, то он возвращает int, если аргумент float, он возвращает float. Также он работает со сложной переменной, т.е.abs(a+bj)
также работает и возвращает абсолютное значение, т.е.math.sqrt(((a)**2)+((b)**2)
math.fabs()
: Работает только с целыми числами или значениями с плавающей запятой. Всегда возвращает абсолютное значение с плавающей запятой независимо от типа аргумента (кроме комплексных чисел).источник