Si vous quittez et redémarrez l'agent utilisateur Python, toutes les définitions (fonctions et variables) seront perdues. Il est donc préférable d'utiliser un éditeur de texte pour écrire des programmes plus longs et plus complexes et utiliser un fichier en entrée pour l'agent utilisateur. Ce fichier est aussi appelé un script. Si un programme s'allonge, il est préférable de le diviser en plusieurs fichiers pour en faciliter la maintenance. Il est également avantageux de pouvoir utiliser des fonctions utiles dans différents programmes sans avoir à les redéfinir dans chaque programme.
C'est pourquoi Python offre la possibilité de définir quelque chose dans un fichier et de l'utiliser à nouveau dans un autre fichier ou dans la console interactive. Ce fichier s'appelle un module. Les définitions d'un module peuvent être importées dans d'autres modules ou dans le module principal, qui contient toutes les fonctions et variables accessibles dans un script.
Un module est un fichier contenant des définitions et des instructions Python. Le nom de fichier avec le suffixe.py correspond au nom du module. Dans un module, le nom du module est disponible sous la forme __name__ (variable globale de type String). Par exemple : Ouvrez un éditeur de votre choix et créez un fichier dans le répertoire actuellement appelé fibo.py avec le contenu suivant :
# Le module des nombres de Fibonacci.
def fib(n) : # écrire la séquence de Fibonacci sur n
a, b = 0, 1
tandis que b < n :
impression (b, fin='''''''''')
a, b = b = b, a+b
appuyez sur()
def fib2(n) : # retourne la séquence de Fibonacci à n
résultat = []
a, b = 0, 1
tandis que b < n :
résultat.annexe(b)
a, b = b = b, a+b
résultat obtenu
Ouvrez ensuite votre interpréteur Python et importez le module avec la commande suivante :
>>> Importer des fibres
Cette commande n'insère pas automatiquement les fonctions définies par fibo.py dans la table globale des symboles, mais seulement le nom du module fibo. Pour adresser les fonctions, utilisez le nom du module :
>>>>> fibo.fibo.fibo.fibo.fibo.fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>>>> Fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__nom_nom_nom_nom_nom_nom_de_fibo
fibo
Si vous prévoyez d'utiliser souvent une fonction, vous pouvez l'associer à un nom local.
>>> fib = fibo.fibo.fibo.fibo.fib
>>> Fibre (500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
Informations complémentaires sur les modules
Un module peut contenir à la fois des instructions exécutables et des définitions de fonctions. Ces instructions sont destinées à initialiser le module et ne sont exécutées que lorsque le module est importé pour la première fois.
Chaque module possède sa propre table de symboles privée, qui à son tour est utilisée comme une table de symboles globale par toutes les fonctions de ce module. Par conséquent, l'auteur d'un module peut utiliser en toute sécurité des variables globales dans son module, puisqu'elles ne peuvent pas chevaucher les variables globales de l'utilisateur. Par contre, si vous savez ce que vous faites, vous pouvez aussi changer les variables globales d'un module en utilisant la même orthographe pour adresser ses fonctions, modname.itemname.itemname.
Les modules peuvent importer d'autres modules. Il est courant, mais non obligatoire, de mettre toutes les instructions d'importation au début d'un module (ou dans ce cas d'un script). Les noms des modules importés sont insérés dans la table des symboles du module d'importation.
Il existe une variante de l'instruction d'importation qui insère certains noms de modules directement dans la table des symboles du module d'importation. Par exemple
>>>>> à partir de l'importation de fibres, fib2
>>> Fibre (500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
Toutefois, cette variante ne saisit pas le nom du formulaire à partir duquel les noms sont importés dans la table de symboles locale, mais uniquement ceux qui sont répertoriés. Dans cet exemple, le fibo n'est pas inséré.
En outre, il existe une variante pour importer tous les noms de modules :
>>>>> de l'importation de fibres *
>>> Fibre (500)
1 1 2 3 5 8 13 21 34 55 89 144 233 37
Importez tous les noms sauf si vous commencez par un soulignement (_). Dans la plupart des cas, cette variante n'est pas utilisée car elle importe des noms inconnus dans l'agent utilisateur et certains noms déjà définis peuvent être remplacés.
Notez que l'importation *-import d'un module ou d'un paquet est généralement désapprouvée, car elle cause souvent un code mal lisible. Cependant, il est bon de l'utiliser dans l'interpréteur interactif pour faire moins de dactylographie.
Note
Pour des raisons d'efficacité, chaque module n'est importé qu'une seule fois à partir d'une session d'interprétation. Vous devez donc redémarrer l'agent utilisateur lorsque vous changez de module - ou utiliser imp.reload(), par exemple importer imp ; imp.reload(nom du module), si c'est juste un module que vous voulez tester de manière interactive.