J'ai remarqué qu'en python il y a deux semblable à la recherche de méthodes pour trouver la valeur absolue d'un nombre:
Première
abs(-5)
Deuxième
import math
math.fabs(-5)
Comment ces méthodes diffèrent-ils?
J'ai remarqué qu'en python il y a deux semblable à la recherche de méthodes pour trouver la valeur absolue d'un nombre:
Première
abs(-5)
Deuxième
import math
math.fabs(-5)
Comment ces méthodes diffèrent-ils?
math.fabs()
convertit son argument à flotteur si il peut (s'il le peut, il déclenche une exception). Il prend alors la valeur absolue, et renvoie le résultat sous la forme d'un flotteur.
En plus de flotteurs, abs()
travaille également avec des nombres entiers et des nombres complexes. Son type de retour dépend du type de son argument.
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
Edit: @aix suggéré, une meilleure (plus juste) pour comparer la différence de vitesse:
In [1]: %timeit abs(5)
10000000 loops, best of 3: 86.5 ns per loop
In [2]: from math import fabs
In [3]: %timeit fabs(5)
10000000 loops, best of 3: 115 ns per loop
In [4]: %timeit abs(-5)
10000000 loops, best of 3: 88.3 ns per loop
In [5]: %timeit fabs(-5)
10000000 loops, best of 3: 114 ns per loop
In [6]: %timeit abs(5.0)
10000000 loops, best of 3: 92.5 ns per loop
In [7]: %timeit fabs(5.0)
10000000 loops, best of 3: 93.2 ns per loop
In [8]: %timeit abs(-5.0)
10000000 loops, best of 3: 91.8 ns per loop
In [9]: %timeit fabs(-5.0)
10000000 loops, best of 3: 91 ns per loop
Il semble donc abs()
seulement a un léger avantage en termes de vitesse de plus de fabs()
pour les entiers. Pour les chars, abs()
et fabs()
de démontrer vitesse similaire.
En plus de ce que @aix a dit, une chose de plus à prendre en compte est la différence de vitesse:
In [1]: %timeit abs(-5)
10000000 loops, best of 3: 102 ns per loop
In [2]: import math
In [3]: %timeit math.fabs(-5)
10000000 loops, best of 3: 194 ns per loop
Donc, abs()
plus rapide que de l' math.fabs()
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.