17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Structuration du code<br />

CHAPITRE 5<br />

L’importation génère un objet de type module qui contient, outre l’ensemble des éléments<br />

du fichier, deux variables globales __name__ et __file__ qui contiennent respectivement<br />

le nom du module et le nom du fichier système correspondant.<br />

Variables globales __name__ et __file__<br />

>>> absmod3.__name__<br />

'absmod3'<br />

>>> absmod3.__file__<br />

'/home/tziade/Desktop/absmod3.pyc'<br />

On constate que le nom du fichier n’est pas absmod3.py mais absmod3.pyc. Les<br />

fichiers .pyc sont issus d’une optimisation automatiquement mise en œuvre par<br />

l’interpréteur : lorsque qu’un module est invoqué, il recherche dans le répertoire du<br />

fichier source un fichier portant le même nom avec l’extension .pyc. Le contenu de<br />

ce fichier correspond au résultat du travail de lecture du fichier source par l’interpréteur<br />

(analyse lexicale) et permet de gagner du temps au moment du chargement.<br />

Ce gain de temps peut être relativement important lorsque des sources importent<br />

plusieurs modules qui eux-mêmes en importent d’autres et ainsi de suite : l’arbre des<br />

dépendances peut être rapidement conséquent et la quantité de code à lire pour préparer<br />

les contextes d’exécution monstrueuse.<br />

Ce fichier est bien sûr recalculé par l’interpréteur si sa date de création est antérieure<br />

à la date de modification du fichier source.<br />

Primitive reload<br />

Lorsqu’un fichier source est modifié et déjà chargé par une directive import, les<br />

modifications ne seront pas visibles par le code. Un deuxième appel à import ne<br />

rechargera pas non plus le fichier car avant d’importer un module, l’interpréteur<br />

vérifie qu’il ne l’est pas déjà, en scrutant sys.path. La primitive reload permet de<br />

forcer le rechargement du fichier.<br />

Rechargement d’un module<br />

>>> reload(absmod3)<br />

<br />

Attention cependant : les éventuelles instances de classe déjà créées ne sont pas touchées<br />

par l’appel à reload.<br />

135

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!