Chp G. Utilisation des bibliothèques en python
Le langage python est capable d'effectuer les principales tâches algorithmiques de base (gestion des variables, boucles, tests). Mais, il y a des tâches courantes qu'il ne sait pas faire nativement. C'est pourquoi, afin d'éviter de "réinventer la roue" à chaque fois, il existe d'innombrables bibliothèques qui accompagnent ce langage. Pour faire simple, ces bibliothèques (on parle aussi de modules, ou de librairies ou parfois de packages) sont des ensembles de fonctions relatives à une thématique donnée (par exemple le module math regroupe des fonctions relatives aux mathématiques !) qui ont été programmées par d'autres personnes et qui sont mises à disposition de la communauté pour faciliter la création de programmes. On peut retrouver sur la documentation officielle de python une liste de bibliothèques accessibles : doc python
Il existe beaucoup d'autres libraires, qui ne sont pas fournies avec le langage de base, mais qui peuvent être téléchargées et installées. Là aussi plusieurs possibilités coexistent. Par exemple on peut citer le programme pip qui se charge de télécharger et d'installer des bibliothèques. On ne l'utilisera pas ici, mais on peut aller faire un tour sur https://pypi.org/ pour voir ce qui existe !
L'objectif de ce mini chapitre est de voir comment faire pour importer les fonctions d'une bibliothèque puis de travailler sur deux ou trois classiques.
1. Différentes méthodes pour importer une bibliothèque
Pour faire simple, une bibliothèque est un simple fichier python contenant diverses fonctions auxquelles on pourra accéder depuis notre programme principal après les avoir importées. Voyons sur un exemple générique les différentes possibilités et précisons celles à privilégier.
différentes méthodes d'importation
Imaginons que nous disposons d'un fichier test.py contenant :
# test.py
def carree(x : float) -> float:
"""reçoit un flottant et renvoie son carré"""
return x**2
def cube(x : float) -> float :
"""reçoit un flottant et renvoie son cube"""
return x**3
variable = 1.414
Ensuite, au début du programme souhaitant importer cette bibliothèque, on mettra l'une des lignes de la première colonne du tableau ci-dessous, et pour accéder aux fonctions ont utilisera le code des 3 dernières colonnes:
| Syntaxe | Accès à carree |
Accès à cube |
Accès à variable |
|---|---|---|---|
import test |
test.carree |
test.cube |
test.variable |
import test as t |
t.carree |
t.cube |
t.variable |
from test import * |
carree |
cube |
variable |
from test import carree |
carree |
Impossible | Impossible |
from test import carree as c |
c |
Impossible | Impossible |
Important
Il est important de noter que les méthodes utilisant from..., bien que séduisantes a priori (pas besoin de faire précéder le nom de la fonction par le nom de la bibliothèque), ne sont pas utilisables à grande échelle et on ne les utilisera (éventuellement) que pour des phases de tests. En effet on comprend bien que si l'on importe plusieurs modules, il pourrait rapidement y avoir conflit avec des fonctions qui porteraient le même nom ! Elles sont donc à éviter et on privilégiera autant que faire se peut celles avec import..., sachant que la plupart des éditeurs possèdent une aide à la saisie qui nous évite de taper le nom de la fonction en entier...
2. Un exemple concret : module math
Si l'on veut calculer une exponentielle ou un logarithme népérien, on pourra utiliser le module math.
Méthode conseillée
import math
print(math.exp(2)) # affiche l'exponentielle de 2
print(math.log(2)) # affiche le logarithme népérien de 2
print(math.pi) # affiche une valeur approchée de pi
print(math.cos(math.pi/4)) # ...
import math as m
print(m.exp(2)) # affiche l'exponentielle de 2
print(m.log(2)) # affiche le logarithme népérien de 2
print(m.pi) # affiche une valeur approchée de pi
print(m.cos(m.pi/4)) # ...
Méthode déconseillée
from math import exp, log, pi, cos
print(exp(2)) # affiche l'exponentielle de 2
print(log(2)) # affiche le logarithme népérien de 2
print(pi) # affiche une valeur approchée de pi
print(cos(pi/4)) # ...
from math import *
# * signifie qu'on importe toutes les fonctions du module !
print(exp(2)) # affiche l'exponentielle de 2
print(log(2)) # affiche le logarithme népérien de 2
print(pi) # affiche une valeur approchée de pi
print(cos(pi/4)) # ...
3. Accès à la documentation d'un module
Lorsqu'une bibliothèque est bien conçue, elle contient sa propre documentation. Voyons sur un exemple ce que l'on peut trouver. Supposons que l'on ait importé le module math en tapant import math, alors on peut taper dans le shell :
help(math): pour obtenir de l'aide sur le module complet (pas très lisible...)help(math.log): pour obtenir de l'aide uniquement sur la fonctionlogdir(math): affiche la liste de toutes les fonctions disponibles dans le modulemath
>>>dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh',
'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist',
'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum',
'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp',
'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow',
'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>>help(math.log)
Help on built-in function log in module math:
log(...)
log(x, [base=math.e])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
À noter que la documentation affichée par l'instruction help n'est autre que la docstring de la fonction. D'où l'importance de bien rédiger les docstrings...
Si cette aide n'est pas suffisante, on utilisera bien entendu des sources Internet (ou IA) comme W3School.
4. Les TDs
Le TD G1 : les exemples de base, module math et random
TD G1 version interactive capytale
Versions html : Énoncé et Correction (à venir)
Le TD G2 : modules liés au temps time et datetime
TD G2 version interactive capytale
Versions html : Énoncé et Correction
Le TD G3 : exemple de gros module, pandas
TD G3 version interactive capytale
Versions html : Énoncé et Correction (à venir)
On verra dans le prochain chapitre de très gros modules et très importants pour faire des sciences, les modules numpy et mathplotlib ...