La plupart des fonctions mathématiques usuelles (racine carrée, sinus, logarithme, etc.) ne sont pas chargées en mémoire au démarrage de l’interpréteur Python. Elles appartiennent à un module nommé math qu’il faut donc importer. Il y a plusieurs possibilités (l’instruction choisie doit bien sûr précéder l’utilisation des fonctions intégrées au module) :
import math charge la totalité du module mathles fonctions mathématiques sont alors accessibles sous la forme math.nom_de_la_fonction |
from math import * charge la totalité du module mathon accède aux fonctions du module sans utiliser le préfixe “ math.” |
from math import sqrt, log, exp (par exemple) charge seulement certaines fonctions du moduleon accède aux fonctions chargées sans le préfixe “ math.” |
Remarque : le mécanisme décrit ci-dessus est commun à tous les modules de Python (qu’ils soient intégrés à la distribution elle-même ou créés par des développeurs tiers). La méthode import nom_du_module est généralement conseillée, car elle évite des conflits de noms potentiels (on sait toujours de quel module vient telle ou telle fonction).
Autre remarque : quand le nom d’un module est un peu long, on peut utiliser un alias. Par exemple, pour charger le module itertools, on pourra écrire import itertools as it. De cette façon it devient un alias de itertools, et on pourra par exemple utiliser la fonction accumulate en écrivant simplement it.accumulate.
Pour éviter la lourdeur due à l’utilisation du préfixe “math.”, on pourra utiliser la méthode from math import ...
On voit ici la première instruction (et la première erreur) au lancement de l’application Idle : tant qu’on ne l’a pas importée, on ne peut pas utiliser la fonction sqrt car elle est inconnue de l’interpréteur Python.
|
1 2 3 4 5 6 7 8 |
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 01:25:11) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "copyright", "credits" or "license()" for more information. >>> sqrt(5) Traceback (most recent call last): [...] NameError: name 'sqrt' is not defined >>> |
On importe donc la totalité du module math par l’instruction import math. L’erreur se produit à nouveau si on oublie de préfixer par “math.” le nom de la fonction sqrt :
|
1 2 3 4 5 6 7 |
>>> import math # importe la totalité du module math >>> sqrt(5) # il faut écrire math.sqrt(5) et pas seulement sqrt(5) Traceback (most recent call last): [...] NameError: name 'sqrt' is not defined >>> math.sqrt(5) # comme ça c'est mieux 2.23606797749979 |
Voici comment on pourrait écrire l’expression {\pi\ln(1+\sqrt{2}+\sqrt{3})} après avoir chargé le module math :
|
1 2 3 |
>>> import math >>> math.pi * math.log(1 + math.sqrt(2) + math.sqrt(3)) 4.467997504231714 |
Voici comment écrire la même expression, mais après avoir importé le module math par from math import * :
|
1 2 3 |
>>> from math import * >>> pi * log(1 + sqrt(2) + sqrt(3)) 4.467997504231714 |
Quand le module math a été chargé, on obtient le détail des fonctions qu’il contient en tapant help(math).
Voici l’essentiel des fonctions du module math, évaluées en un argument x quelconque :
e pi |
constantes e = 2.718281828459045 et π = 3.141592653589793 |
log(x) log2(x) log10(x) log(x,b) |
logarithme népérien, de base 2, de base 10, de base b |
exp(x) expm1(x) log1p(x) |
calcule {e^x}, {e^x-1} pour x “petit”, ln(1+x) pour x “petit” |
cos(x) sin(x) tan(x) |
fonctions trigonométriques directes (x en radians) |
degrees(x) radians(x) |
conversion radians → degrés, conversion degrés → radians |
acos(x) asin(x) atan(x) |
fonctions trigonométriques réciproques de x (résultat en radians) |
cosh(x) sinh(x) tanh(x) |
fonctions hyperboliques directes de x |
acosh(x) asinh(x) atanh(x) |
fonctions hyperboliques réciproques de x |
floor(x) ceil(x) trunc(x) |
partie entière [x], entier plafond, tronque vers l’entier direction 0 √ |
sqrt(x) fabs(x) fmod(x,y) |
calcule √ x, |x|, x mod y (résultats de type float) |
factorial(x) gamma(x) |
factorielle x! (x dans N), fonction d’Euler Γ(x) |
fsum(...) |
somme en mode flottant d’un objet itérable (par ex : une liste) |