Rappels de 1ère
En classe de première, nous avons vu l'import des modules et les docstrings, ce n'est pas pour rien que votre enseignant a insisté dessus... Revoyons cela en détail :
Rappel : Les fonctions
Il existe 3 types de fonctions :
les fonctions natives au langages Python, telles que
print
ouinput
, elles sont directement utilisables,les fonctions personnelles que vous créez lorsque vous codez,
les fonctions développées et testées par différents programmeurs mais qui ne sont pas directement utilisables.
Ces dernières fonctions, procédures ou encore classes (en POO) peuvent être regroupées par thèmes dans des fichiers séparés alors appelé module qui peuvent être groupés en packages.
Remarque :
Les fonctions crées au sein de classes en programmation orientée objet deviennent des méthodes.
Il est possible d'écrire son propre module, ce que nous allons faire dans ce chapitre !
Exemple : Exemples de modules
le module
math
contient de nombreuses fonctions mathématiques usuelles comme la racine carrée (sqrt
,round
), ...le module
random
contient de nombreuses fonctions modélisant le hasard comme l'obtention d'un nombre entier aléatoire compris entre deux nombres entiers a et b (randint(a,b)
), ...le module
matplotlib.pyplot
permet de réaliser des graphiques, des tracés de courbes, ...
Rappel : Importation des modules
Certains modules Python sont installés par défaut et d'autres peuvent être ajoutées en utilisant des outils comme pip
. Le dépôt Pypi (Python package index) référence la plupart des modules tiers.
Voici les différentes variantes pour importer un module, notamment random
.
Méthode 1 :
On importe le module random
, les fonctions du module doivent être préfixées du nom du module :
import random
a = random.randint(1, 10)
Si on ne préfixe pas, voici l'erreur :
NameError: name 'randint' is not defined
Méthode 2 :
On importe le module random
et on le renomme en rd (le nouveau nom donnée est généralement plus court) :
import random as rd
a = rd.randint(1, 10)
Méthode 3 :
On importe uniquement la fonction randint
du module random
, plus besoin de préfixe mais seule la fonction randint
est disponible :
from random import randint
a = randint(1, 10)
On peut importer une ou plusieurs fonctions :
from random import randint, choice
a = randint(1, 10)
couleurs = ['bleu', 'vert', 'rouge']
b = choice(couleurs)
Attention : Attention à import *
Toutes les variantes contenant des * dans la ligne d'importation visent à rendre disponibles des fonctions sans avoir à les préfixer, ce qui peut paraître efficace pour le programmeur débutant.
En réalité, il n'en n'est rien : on ne maîtrise plus la liste exacte de ce qui est importé dans l'espace de noms principal, ce qui peut être source de bugs complexes à découvrir.
De plus, en reprenant plus tard son travail ou en le distribuant, on n'aura plus de trace simple de l'endroit où se trouvent les fonctions et classes utilisées, rendant la maintenance difficile.
import *
est à bannir !
Fondamental : Lister toutes les fonctions d'un module
Une fois que vous avez importé le module, vous pouvez simplement faire :
help(nom_module)
... ce qui permet d'obtenir la documentation sur toutes les fonctions en même temps, de manière interactive.
On peut aussi utiliser :
dir(nom_module)
... pour lister simplement les noms de toutes les fonctions et variables définies dans le module.
La documentation
Mais comment est renseigné cette documentation ?
Que l'on écrive ou qu'on utilise une fonction ou un module, la documentation est centrale pour que le travail soit réutilisable.
Parmi les différents mécanismes, l'un des plus simple est la docstring qui peut être attachée à une fonction, à une méthode, à une classe, à un module ou à un package.
Dans tous les cas, c'est une chaîne de caractères qui doit figurer au début de l'entité qu'elle documente.
Cette documentation est ensuite consultable à l'aide de la commande help
que nous avons vu au dessus.
Exemple : Une docstring exemplaire
def somme_nb_entiers(n):
"""
n - int, entier strictement positif
Sortie: int - somme des n premiers entiers
>>> somme_nb_entiers(0)
0
>>> somme_nb_entiers(1)
0
>>> somme_nb_entiers(4)
6
"""
somme = 0
for i in range(n-1):
somme = somme + i
return somme
Texte légal : Vocabulaire
Un point sur le vocabulaire que vous croiserez :
Un module est un fichier qui contient des variables, fonctions, objets, méthodes...
Un package est un ensemble de dossiers (et sous dossiers). En général, un package contient plusieurs modules.
Une bibliothèque est constituée de plusieurs packages. On utilise également le mot library pour désigner une bibliothèque.
Voici quelques exemples de bibliothèques : Matplotlib (graphiques), Numpy et Scipy (calcul scientifique), PIL(traitement d'images), Pygame (jeu en 2D) ou encore Django pour le développement Web.