Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAlexandrie Jeanne Modifié depuis plus de 10 années
1
Modules et packages Modules, fichiers, chemin d’accès à un module, espaces de noms, importation de modules ou d’attributs de modules, packages, exemples.
2
2 Qu’est-ce qu’un module ? Les modules sont des entités indépendantes et organisées de code Python, qui peuvent être partagées. De ces entités, il peut s’agir d’une classe unique avec ses variables et ses méthodes, ou d’un groupe de fonctions apparentées, opérant néanmoins indépendamment les unes des autres. Ces entités doivent être partagées permettant de maximiser la réutilisabilité du code. Modules et fichiers Si les modules représentent un moyen d’organiser logiquement le code Python, les fichiers permettent quant à eux d’organiser physiquement les modules. Chaque fichier est considéré comme un module individuel, et vice versa. Le nom de fichier d’un module est le nom du module auquel on ajoute l’extension.py. En Python, vous pouvez importer des modules ou des attributs de modules. Puisque vous ne pouvez pas importer plusieurs modules portant le même nom, même si 2 modules renferment une fonction avec le même nom, il n’y a pas de recoupements possibles car chaque module définit son propre espace de noms. Exemple :Le nom d’une fonction sin() d’un module math_de_base serait : math_de_base.sin().
3
3 Chemin d’accès à un module Pour importer un module, il nous faut connaître le chemin d’accès à un module ou, plus précisément, l’ensemble des répertoires qui nous mènent à ce module. Considérons l’exemple suivant : À l’unité E, nous avons créé un répertoire nommé Calcul_matriciel_et_vectoriel; dans ce répertoire, nous avons créé un fichier nommé Calcul_vectoriel.py lequel renferme des fonctions manipulant des vecteurs. def somme(x, y): z = [] for i in range(len(x)): z.append(x[i] + y[i]) return z def difference(x, y): z = [] for i in range(len(x)): z.append(x[i] - y[i]) return z def produit_scalaire(x, y): z = 0.0 for i in range(len(x)): z += x[i] * y[i] return z def affichage(x): print "[", for i in range(len(x)): print "%5.2f" % (x[i]), print "]",
4
4 Pour utiliser ces fonctions dans un programme d’application, nous devons importer le module Calcul_vectoriel. Si vous ne spécifiez pas explicitement le chemin d’accès à ce module, une erreur se produit : >>> import Calcul_vectoriel Traceback (most recent call last): File " ", line 1, in import Calcul_vectoriel ImportError: No module named Calcul_vectoriel Dans le module sys, on retrouve la variable sys.path laquelle renferme la liste des différents chemins d’accès aux modules disponibles. >>> import sys >>> sys.path ['C:\\Python25\\libs\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python25.zip', 'C:\\Python25\\libs\\DLLs', 'C:\\Python25\\libs\\lib', 'C:\\Python25\\libs\\lib\\plat-win', 'C:\\Python25\\libs\\lib\\lib-tk', 'C:\\Python25\\libs', 'C:\\Python25\\libs\\lib\\site-packages'] Puisque cette variable est une liste, pour rendre accessible ce nouveau module, il s’agit d’utiliser la méthode append() d’une liste pour ajouter le chemin d’accès du nouveau module comme dans l’exemple qui suit.
5
5 import sys sys.path.append("E:\\Calcul_matriciel_et_vectoriel") import Calcul_vectoriel u, v = [2.3, 4.5, -9.5, 3.0], [4.2, -1.1, -2.2, 0.5] Calcul_vectoriel.affichage(u) print " + ", Calcul_vectoriel.affichage(v) print " = ", Calcul_vectoriel.affichage(Calcul_vectoriel.somme(u, v)) print "\n" Calcul_vectoriel.affichage(u) print " - ", Calcul_vectoriel.affichage(v) print " = ", Calcul_vectoriel.affichage(Calcul_vectoriel.difference(u, v)) print "\n" Calcul_vectoriel.affichage(u) print " * ", Calcul_vectoriel.affichage(v) print " = ", print Calcul_vectoriel.produit_scalaire(u, v) Pour référer à une fonction du module Calcul_vectoriel, on doit spécifier à chaque fois l’espace de nom nommé Calcul_vectoriel.
6
6 Bien sûr, ce procédé place le répertoire à la fin de votre chemin d’accès. Si vous souhaitez le positionner ailleurs pour accélérer la recherche ou tenir compte du fait que vous avez plusieurs versions d’un même module, vous devez employer la méthode insert(). Au lieu d’utiliser sys.path qui contient une liste de chemins d’accès, sys.modules est un dictionnaire où les clés sont les noms des modules et où les valeurs indiquent leur emplacement physique.
7
7 Importation de modules Pour importer des modules, on doit utiliser l’instruction import. Exemple I :import Calcul_vectoriel import Calcul_matriciel import Quaternion Exemple II :import Calcul_vectoriel, Calcul_matriciel, Quaternion Optez pour ce choix de préférence (code plus lisible). Il est préférable aussi d’importer en dernier lieu les modules spécifiques à une application après ceux de la bibliothèque standard de Python. Lorsqu’un module est importé, les règles de portée suivantes s’appliquent : si l’importation se situe au niveau du module, sa portée est globale; si elle se situe dans une fonction, sa portée est locale. Pour importer des éléments particuliers d’un module dans votre propre module, nous employons l’expression from-import dont voici la syntaxe : from module import nom1, nom2, …., nomn On peut utiliser plusieurs expressions from-import ou une seule très longue avec \ pour séparer les lignes. On peut référer directement à nom1, nom2, …., nomn car ceux-ci sont ramenés dans l’espace de noms courant. La notation module.nom1 par exemple est incorrecte car le module n’est pas importé.
8
8 Lorsque vous souhaitez importer un module ou un attribut de module portant un nom déjà employé dans votre application, ou que ce nom ne vous convienne pas parce qu’il est trop long par exemple, on peut utiliser des noms différents de ceux d’origine. 1 ière solution :affecter le nom du module à une variable. import sys sys.path.append("E:\\Calcul_matriciel_et_vectoriel") import Calcul_vectoriel Cv = Calcul_vectoriel del Calcul_vectoriel u = [2.3, 4.5, -9.5, 3.0] Cv.affichage(u) On ne peut plus utiliser le nom du module Calcul_vectoriel. 2 ième solution :l’usage du mot-clé as. import Calcul_vectoriel from Calcul_vectoriel import Produit_scalaire peut être remplacé par : import Calcul_vectoriel as Cv from Calcul_vectoriel import Produit_scalaire as Ps
9
9 Une conséquence de l’importation d’un module est l’exécution immédiate du module importé. Cela implique l’initialisation des variables globales ainsi que la prise en compte des déclarations de classes et de fonctions. Un module n’est chargé qu’une seule fois, quel que soit le nombre de fois où il est importé. Cela évite que son exécution se produise encore et encore à l’occasion de multiples importations. dimension = 3... def affichage(x): print "Dimension = ", dimension, "[", for i in range(len(x)): print "%5.2f" % (x[i]), print "]", En important un module, tous ses éléments feront partie de l’espace de noms local. Une modification d’un de ses éléments n’affecte que la copie de cet élément et non l’original. Exemple : Partie du module Calcul_vectoriel :
10
10 Dimension = 3 [ 2.00 3.00 4.00 ] Dimension = 2 Dimension = 3 [ 1.00 2.00 ] import sys sys.path.append("E:\\Calcul_matriciel_et_vectoriel") from Calcul_vectoriel import dimension, affichage u = [2, 3, 4] affichage(u) dimension = 2 v = [1, 2] print "dimension = ", dimension affichage(v) print "\n" Application : Résultats à l’affichage : La variable dimension n’a pas changé de valeur dans le module importé car l’importation d’un module entraîne une copie dans le module qui importe.
11
11 Exemple : Pour produire un effet contraire, une solution consiste à : Partie du module Calcul_vectoriel : idem. Dimension = 3 [ 2.00 3.00 4.00 ] Dimension = 2 Dimension = 2 [ 1.00 2.00 ] import sys sys.path.append("E:\\Calcul_matriciel_et_vectoriel") import Calcul_vectoriel u = [2, 3, 4] Calcul_vectoriel.affichage(u) Calcul_vectoriel.dimension = 2 v = [1, 2] print "dimension = ", Calcul_vectoriel.dimension Calcul_vectoriel.affichage(v) print "\n" Application : Résultats à l’affichage : On obtient l’effet désiré.
12
12 Package Une structure hiérarchique de répertoires. Algebre_lineaire Calcul_vectoriel Calcul_matriciel Vecteur_2D.py Vecteur_3D.py Vecteur.py Matrice.py Matrice_carree.py Algebre_lineaire est un package de haut niveau; Calcul_vectoriel et Calcul_matriciel sont des sous-packages. Les fichiers Vecteur_2D.py, Vecteur_3D.py, Vecteur.py, Matrice.py et Matrice_carree.py sont des modules. __init__.py
13
13 Remarque : Pour faire en sorte que Python identifie le nom d’un répertoire comme celui d’un package et non d’un module, il est essentiel que ce répertoire renferme un fichier __init__. Si l’on veut éviter la présence de ces fichiers __init__, le chemin d’accès au complet de chaque module doit être inséré dans sys.path. Ce fichier est un module d’initialisation nécessaire à l’emploi de from-import, pour l’importation de packages ou de sous-packages. Il peut néanmoins être vide s’il n’est pas utilisé. from Algebre_lineaire import Calcul_matriciel Calcul_matriciel.Matrice.Initialisation() from Algebre_lineaire.Calcul_matriciel import Matrice Matrice.Initialisation() Exemples : Importation de packages ou de modules. Dans l’exemple précédent, le chemin d’accès au répertoire Algebre_lineaire doit être présent dans sys.path. Si vous ne souhaitez pas que certains attributs d’un module soient importés lors de l’importation from module import *, placez un blanc souligné (_) devant les noms de ces attributs. Ne s’applique pas lors de l’importation d’un module entier.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.