La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Formation Python Modules (d'après "Learning Python", de Mark Lutz)

Présentations similaires


Présentation au sujet: "Formation Python Modules (d'après "Learning Python", de Mark Lutz)"— Transcription de la présentation:

1 Formation Python Modules (d'après "Learning Python", de Mark Lutz)

2 Questions abordées Qu'est-ce qu'un module ? Différences import/from/reload ?

3 Définition Tout programme python peut-être décomposé en multiples modules. Chaque module est un ensemble de variables et de fonctions, stockées dans un fichier séparé. Pour utiliser les éléments d'un module donné, on doit le charger en mémoire à l'aide de l'une de ces instructions ou fonction prédéfinies : import (récupération d'un module complet) from (récupération de quelques éléments) reload (force le rechargement)

4 Premier import Effet de la première instruction import mod d'un processus : 1) Recherche du fichier mod.py dans sys.path : 1) répertoire original du programme 2) répertoires de PYTHONPATH 3) répertoires standards 2) Compilation, si mod.pyc n'est pas à jour. 3) Exécution de mod.pyc, en enregistrant variables et fonctions dans l'objet ainsi créé (attributs du module).

5 Effet de l'instruction import module1 module1.py prompt = '%' def printer(x) print prompt, x prompt = '%' def printer(x) print prompt, x import module1 module1.printer('Hello !') % Hello ! import module1 module1.printer('Hello !') % Hello ! programme principal module1 '%' printer() {prompt,printer} On accède aux éléments du module avec l'opérateur "."

6 Effet de l'instruction import module1 as m1 module1.py prompt = '%' def printer(x) print prompt, x prompt = '%' def printer(x) print prompt, x import module1 as m1 m1.printer('Hello !') % Hello ! import module1 as m1 m1.printer('Hello !') % Hello ! programme principal m1 '%' printer() {prompt,printer}

7 Effet de l'instruction from module1 import printer module1.py prompt = '%' def printer(x) print prompt, x prompt = '%' def printer(x) print prompt, x from module1 import printer printer('Hello !') % Hello ! from module1 import printer printer('Hello !') % Hello ! programme principal '%' printer() {prompt,printer} printer()

8 Effet de l'instruction from module1 import * module1.py prompt = '%' def printer(x) print prompt, x prompt = '%' def printer(x) print prompt, x from module1 import * printer('Hello !') % Hello ! from module1 import * printer('Hello !') % Hello ! programme principal '%' printer() {prompt,printer} printer() prompt

9 Import et from sont des instructions d'affectation Ils peuvent être insérés n'importe où dans le code. Ils sont interprétés à l'éxécution. Si des variables de même nom existaient, elles pointent sur les nouveaux objets créés en mémoire par from. Les variables créées peuvent être modifiées (avec mesure…).

10 Quizz (1/3) m = 2 … import module1 as m m prompt = '%' def printer(x) print prompt, x prompt = '%' def printer(x) print prompt, x module1.py > Hello ! m.prompt = '>' m.printer('Hello !') '%' printer() {prompt,printer} m m 2 2 '>'

11 Quizz (2/3) prompt = '%' def printer(x) print prompt, x prompt = '%' def printer(x) print prompt, x mod1.py prompt = '#' from mod1 import * prompt = '>' printer('Hello !') % Hello ! '%' printer() {prompt,printer} printer() prompt '#' '>'

12 Fonction prédéfinie reload() N'est autorisé que pour un module déjà importé. Ré-éxécute les instructions du fichier, et refait les attributs du module existant. Le code client qui utilise le nom de module verra les nouveaux objets. Le code client qui utilise des variables créées par from verra les anciens objets. import module1 as m m.prompt = '>' reload(module1) m.printer('Hello !') % Hello ! from module1 import * prompt = '>' printer('Hello !') reload(module1) printer(' import module1 as m m.prompt = '>' reload(module1) m.printer('Hello !') % Hello ! from module1 import * prompt = '>' printer('Hello !') reload(module1) printer(' programme principal prompt = '%' def printer(x) print prompt, x prompt = '%' def printer(x) print prompt, x module1.py

13 Résumé Lors du premier appel à import ou from, le fichier correspondant est intégralement compilé, éxécuté et chargé en mémoire. import crée une variable désignant l'ensemble du module. from duplique certaines variables dans l'espace appelant. reload force la ré-éxécution des instructions du fichier.

14 Quelques pièges, trucs & astuces Attention à l'instruction from, qui peut écraser des variables déjà utilisées avec celles de même nom issues du module. Attention à l'usage simultané de from et de reload. Parce qu'un nom de fichier python est appelé à être utilisé comme module de même nom, il faut suivre les règles s'appliquant aux noms de variables. Evitez print.py !

15 Quizz (3/3) 1 from small import x, y x = 4 y[0] = 5 import small small.x [ 2, 3 ] y reload(small) small.y [ 5, 3 ] small.y [ 5, 3 ] x = 1 y = [ 2, 3 ] x = 1 y = [ 2, 3 ] small.py y y x x 1 1 [0,1] {x,y} small [0,1]


Télécharger ppt "Formation Python Modules (d'après "Learning Python", de Mark Lutz)"

Présentations similaires


Annonces Google