@ccueil Colles

Programmation en Python

Module et bibliothèques en python - Importer, utiliser, créer



Modules et fonctions

La notion de fonction est fondamentale en algorithmique et programmation, au moins autant qu'en mathématiques (coïncidence ?).
En fait dès qu'une suite d'instructions, ensemble de commandes, bout de programme, … est amené à être (ré)utilisé plusieurs fois, il est intéressant de le définir une fois pour toute, à part, pour enfin ne simplement qu'en faire référence à chaque fois que souhaité. Voir le paragraphe précédent: fonctions en python pour créer, appeler et manipuler des fonctions en python à l'intérieur d'un programme.

On peut ainsi parfois être amené à mettre à part plusieurs fonctions (par exemple, dans un contexte mathématique, une fonction qui donne les solutions d'équations du premier degré, une pour le second degré, une autre qui trace la courbe représentative d'une fonction, …). Pour des projets qui deviennent de plus en plus ambitieux (au moins en taille), ou pour des fonctions qu'on souhaiterait utiliser dans plusieurs projets différents, on peut alors enregistrer ces fonctions dans un ou plusieurs fichiers à part.
Par exemple, si on enregistre dans le fichier somme.py
def ajoute(x,y):
    return x+y
on peut ensuite, dans un fichier différent situé dans le même répertoire, appeler le fichier précédent et sa fonction:
from somme import *
x=3
y=5
z=ajoute(x,y)
print(z)
# affiche 8
La 1ère ligne importe toutes les fonctions du fichier somme.py dans le programme courant.

Différentes méthodes d'import

Import avec préfixe

Avec l'exemple précédent, on peut importer en une fois toutes les fonctions contenues dans le fichier somme.py. Pour appeler une fonction spécifique, on la préfixe alors par le nom du module:
import somme
x=3
y=5
z=somme.ajoute(x,y)
print(z)
# affiche 8
Sur le même modèle que pour les fonctions, python créé alors un espace de travail à part, qui n'interfère pas directement avec l'espace de travail courant. Regroupées ainsi, ces fonctions forment un module, ou une bibliothèque (library en anglais, abrégé en informatique par lib-…). On peut alors se concentrer plus facilement sur le reste original de notre programme.
Avec cette méthode, les fonctions chargées peuvent avoir le même nom que des fonctions du programme courant. Le préfixe permet de clairement distinguer la fonction appelée:
import somme

# on définit ici une nouvelle
# fonction avec le même nom
def ajoute(x,y):
    return x*y

x=3
y=5
z=somme.ajoute(x,y)
print("z=",z)
# affiche 8
w=ajoute(x,y)
print("w=",w)
# affiche 15

Import sans préfixe

On peut éviter l'utilisation de préfixe dans l'utilsation de fonction. On importe alors directement la ou les fonctions dans l'espace de travail courant.
Attention alors ici au conflit si une fonction importée porte le même nom qu'une fonction du programme courant: si on est sûr, c'est plus rapide et simple a utilisé, sinon, cela peut être dangereux et être source d'erreurs…
from somme import *
x=3
y=5
z=ajoute(x,y)
print(z)
# affiche 8

def ajoute(x,y):
    return x*y
z=ajoute(x,y)
print(z)
# affiche 15: la fonction ajoute a été écrasée

Bibliothèques (très) usuelles

Hasard et probabilité: module random

La bibliothèque random permet de charger (ou importer) de nombreuses fonctions mathématiques concernant l'aléatoire et le calcul de probabilité.
Quelques fonctions courantes:
  • random: la fonction de base (qui est d'ailleurs le nom même de la bibliothèque) qui retourne un nombre flottant (float) dans l'intervalle [0;1[.
    from random import random
    a=random()
    print(a)
    
    Cette fonction n'a pas d'argument.
  • randint tire un nombre entier (int) au hasard (rand):
    from random import randint
    a=randint(0,10)
    print(a)
    
    À chaque exécution, ce programme affiche un nombre entier au hasard entre 0 et 10.
  • choice: choisit un élément au hasard dans une liste
    from random import choice
    liste=["fr","math","HG","SVT","LV1"]
    w=choice(liste)
    print("Ce soir je travaille: "+w)
    
    Remarque: ce programme est équivalent à
    from random import randint
    c=randint(0,len(liste)-1)
    w=liste[c]
    print("Ce soir je travaille: "+w)
    
  • shuffle: mélange la liste donnée en argument.
    from random import shuffle
    liste=["fr","math","HG","SVT","LV1"]
    shuffle(liste)
    print(liste)
    


Libxy: bibliothèque graphique portable