GLO-1901 Introduction à la programmation avec Python

publicité
GLO-1901 Introduction
à la programmation
avec Python
Modules et organisation du code
Marc Parizeau
(automne 2012)
© Marc Parizeau, Département de génie électrique et de génie informatique
Sunday, 23 September, 12
Plan
• Module = fichier.py
✓ permet d'organiser les différents constituants d'un
programme en modules indépendants
✓ favorise la réutilisation du code
✓ permet de partitionner l'espace des noms
• Processus d'importation
• Aperçu de la librairie standard
2
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Architecture d'un
programme Python
• En général, un programme est constitué
d'une hiérarchie de modules
✓ donc plusieurs fichiers
✓ un module peut importer d'autres modules
✓ le processus d'importation rend accessible les objets
d'un module
3
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Énoncé import
• Forme #1:
import module
✓ importe le module module au complet
✓ crée un nouvel espace de noms qui porte le nom du module
• Forme #2:
from module import attribut1, attribut2, etc.
✓ importe les attributs énumérés du module module
✓ les attributs importés sont copiés dans l'espace de noms actuel
• Forme #3:
from module import *
✓ importe tous les attributs du modules module
✓ les attributs importés sont copiés dans l'espace de noms actuel
4
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
•
Par exemple, soit le fichier toto.py qui contient
les énoncés suivants:
x = 1
y = [1, 2]
•
Alors, on peut importer les attributs de toto de
la façon suivante:
✓ exemple #1
>>>
>>>
1
>>>
[1,
import toto
toto.x
toto.y
2]
✓ exemple #2
>>>
>>>
1
>>>
[1,
5
Sunday, 23 September, 12
from toto import x, y
x
y
2]
GLO-1901 ⎯ Modules et organisation du code
Librairie standard
• La librairie standard contient une
panoplie de modules utilitaires
✓ environ 200 modules
✓ tâches relatives au système d'exploitation,
persistence des objets, traitements de texte,
réseautique, parallélisme, Internet & WWW,
interfaces graphiques, etc.
6
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Processus d'importation
1. Trouver le fichier du module
✓ la recherche s'effectue à plusieurs endroits
2. Compiler le code dans un format
intermédiaire (s'il y a lieu)
✓ cette étape produit un fichier .pyc pour tous les
modules importés
3. Exécuter le code pour créer les objets et
les associer aux attributs
7
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Recherche d'un module
• La recherche d'un module s'effectue
selon les chemins suivants:
✓ le répertoire courant du programme
✓ les chemins définis par la variable d'environnement
nommée PYTHONPATH
✓ les répertoires de la librairie standard
• La recherche se poursuit jusqu'à ce qu'un
fichier portant le bon nom soit trouvé
✓ attention de ne pas cacher les modules standards
avec vos propres modules!
8
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
• On peut interroger l'attribut path du module
sys pour connaître la liste des chemins qui
seront explorer par le processus
d'importation de modules
✓ sur ma machine, ça donne:
>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/
Versions/3.2/lib/python32.zip', '/Library/
Frameworks/Python.framework/Versions/3.2/lib/
python3.2', '/Library/Frameworks/
Python.framework/Versions/3.2/lib/python3.2/
plat-darwin', '/Library/Frameworks/
Python.framework/Versions/3.2/lib/python3.2/libdynload', '/Library/Frameworks/Python.framework/
Versions/3.2/lib/python3.2/site-packages']
9
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Espace de noms
• Le processus d'importation transforme le
contenu d'un fichier en un espace de
noms contenant l'ensemble des attributs
définis dans le fichier
✓ suite à l'importation d'un module toto, tous les
attributs x, y, z, etc., du fichier toto.py
correspondant s'appeleront dorénavant toto.x,
toto.y, toto.z, etc.
• «Namespaces are one honking great idea
-- let's do more of those!»
10
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Fonction reload
• Un module déjà importé ne sera jamais
réimporté par l'interpréteur Python
✓ l'interpréteur se souvient des importations
• On peut forcer la réimportation d'un module
à l'aide de la fonction reload du module imp
✓ permet de modifier le code d'un module sans redémarrer
le programme
>>>
>>>
>>>
>>>
11
Sunday, 23 September, 12
import toto
...
from imp import reload
reload(toto)
GLO-1901 ⎯ Modules et organisation du code
Quiz
• Comment faire pour créer un module?
• Quelle est la différence entre l'énoncé
import et l'énoncé from/import?
• Quels genres de problème l'énoncé from/
import peut-il engendrer?
• À quoi sert la fonction reload?
12
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Groupe de modules
• En mettant plusieurs fichiers dans un
même répertoire, on crée un groupe de
modules
✓ en anglais, on dit un «package»
• En python, on spécifie un chemin pour se
rendre à un fichier en séparant les noms
de répertoire par des «.»
✓ par exemple:
import dir.mod
13
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
• Pour que python reconnaisse un répertoire en
tant que «package», celui-ci doit contenir un
fichier nommé __init__.py
✓ généralement, ce fichier contient des énoncés
d'initialisation pour le groupe de modules
✓ le fichier peut être vide, mais il doit néanmoins être présent
✓ son contenu sera exécuté avant l'importation du premier
module contenu dans le groupe
✓ le groupe possède son propre espace de noms
• Les groupes de modules permettent de
regrouper des modules qui travaillent
ensembles et, aussi, d'éviter les conflits de
noms de fichier
✓ deux modules de même nom peuvent coexister à condition
d'appartenir à des groupes différents
14
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Variable __name__
• Cette variable __name__ est
automatiquement définie pour chaque
module (fichier)
• Si le module est exécuté directement par
l'interpréteur, alors cette variable prend
la valeur __main__
• Au contraire, si le module est importé,
alors la variable prend comme valeur le
nom du module
15
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
• Ceci permet à chaque module de déterminer s'il est
exécuté en tant que programme ou en tant que
module
✓ en tant que programme, il a le loisir de pouvoir accomplir une
tâche particulière
✓ en tant que module, en général, il ne fait rien; il attend qu'on lui
dise quoi faire
✓ par exemple:
if __name__ == '__main__':
"""Test de la classe Matrice."""
mat1 = Matrice([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(mat1)
mat2 = uns(1, 2)
print(mat2.transposer())
mat3 = zeros(3, 4)
mat3[2, 2] = 12
print(mat3)
mat_identite = identite(5)
print(mat_identite)
16
Sunday, 23 September, 12
GLO-1901 ⎯ Modules et organisation du code
Téléchargement