Ich habe festgestellt, dass es in Python zwei ähnlich aussehende Methoden gibt, um den absoluten Wert einer Zahl zu ermitteln:
Zuerst
abs(-5)
Zweite
import math
math.fabs(-5)
Wie unterscheiden sich diese Methoden?
math.fabs()
konvertiert sein Argument in float, wenn es kann (wenn es nicht kann, löst es eine Ausnahme aus). Es nimmt dann den absoluten Wert und gibt das Ergebnis als float zurück.
Funktioniert neben Floats abs()
auch mit Ganzzahlen und komplexen Zahlen. Der Rückgabetyp hängt vom Typ des Arguments ab.
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/alexei/<ipython-input-12-8368761369da> in <module>()
----> 1 type(math.fabs(3+4j))
TypeError: can't convert complex to float
abs
funktioniert mit weit mehr als nur ganzen Zahlen und Gleitkommazahlen, und der Ergebnistyp ist nicht immer derselbe wie das Argument, zabs(3+4j)
.fabs
dass es aufgrund seiner immer schwebenden Natur länger dauert, und Sie haben die richtige Antwort!__builtin__.abs()
erfolgreich angewendet werden?__abs__
magische Methode definiertBearbeiten: Wie @aix vorgeschlagen hat, eine bessere (fairere) Möglichkeit, den Geschwindigkeitsunterschied zu vergleichen:
Es scheint also
abs()
nur einen geringen Geschwindigkeitsvorteil gegenüberfabs()
ganzen Zahlen zu haben. Für Schwimmerabs()
undfabs()
zeigen ähnliche Geschwindigkeit.Zusätzlich zu dem, was @aix gesagt hat, ist der Geschwindigkeitsunterschied noch zu berücksichtigen:
Ist
abs()
also schneller alsmath.fabs()
.quelle
from math import fabs
auf jeden Fall und versuchen Sie es-5.0
für beide.math.fabs()
Gibt immer float zurück, währendabs()
Integer zurückgegeben werden kann.quelle
abs
kann einen beliebigen Typ zurückgeben, abhängig von der__abs__
speziellen Methode des Typs, für den er aufgerufen wird.abs()
: Gibt den absoluten Wert gemäß dem Argument zurück, dh wenn das Argument int ist, gibt es int zurück. Wenn das Argument float ist, gibt es float zurück. Es funktioniert auch mit komplexen Variablen, dhabs(a+bj)
es funktioniert auch und gibt den absoluten Wert zurück, d. H.math.sqrt(((a)**2)+((b)**2)
math.fabs()
: Es funktioniert nur mit den Integer- oder Float-Werten. Gibt immer den absoluten Gleitkommawert zurück, unabhängig vom Argumenttyp (mit Ausnahme der komplexen Zahlen).quelle