Photo by Fatos Bytyqi on Unsplash

Les modules en Python

Bien le bonjour les amis, aujourd’hui je vous propose de voir ensemble les modules en Python.

Alors premièrement les modules qu’est ce que cela peut il bien être …. et pourquoi des modules?

Et bien c’est assez simple lorsque vous créez vos programmes dans l’interpréteur, et que vous quittez celui-ci et bien vous perdez ce que vous avez fait. La solution écrire votre code dans un fichier avec un éditeur de texte et l’éxecuter avec Python, en faisant cela, vous venez de créer un script. Vous verrez que part la suite plus votre code grandit plus vous utiliserez des fichiers. Un tel fichier est un module et vous écrivez vos définitions (fonctions) dedans. Les définitions d’un fichier peuvent être utilisées dans un autre fichier cela est bien pratique avec du code complexe. Les modules doivent avoir le suffix .py pour pouvoir fonctionner.

Voici un exemple, créez un fichier nommé hello.py qui contient ceci:

# Hello helloworld

def helloworld(name):
    print('Hello %'.format(name)

Pour la suite ouvrez votre interpréteur et importez votre module de cette façon:

>>> import hello

cela n’ajoute pas les définitions mais y ajoute simplement hello. Maintenant vous pouvez appeler vos fonctions via le nom de votre module.

>>> hello.helloworld('toto')
Hello toto
>>> hello.__name__
'hello'

La variable name permet d’afficher le nom du module.

Les modules en détails.

Un module peut contenir aussi bien des fonctions que des instructions. Les instructions ne sont éxecutées que la première fois que le nom du module est trouvé dans un import. Chaque module a sa prope table ce qui permet d’utiliser des variables globales sans se soucier des conflits de noms que cela pourrait engendrer. Les modules peuvent aussi importer d’autres modules en général nous les importons au début du modules (mais cela n’est pas obligatoire). Avec l’instruction import nous pouvons importer le nom du module directement dans la table des symboles par exemple.

>>> from hello import helloworld
>>> helloworld('Bob')
Hello Bob

Nous pouvons aussi importer tous les noms qui existent dans un module même si cela est déconseillé.

>>> from hello import *
>>> helloworld('John')
hello John

Nous pouvons aussi changer le nom du module pour facilité son rappel par exemple avec le mot clé as.

>>> import hello as h
h.helloworld('Bibi')
Hello Bibi

Cela est aussi valable avec from.

>>> from hello import helloworld as welcome
>>> welcome('toto')
Hello toto

Éxecuter vos modules.

Pour éxecuter vos modules et faire en sorte qu’ils fonctionnent vous pouvez lancer cette commande.

$ python hello.py <arguments>

Mais pour cela il vous faudra faire quelques modifications à votre module car name vaut maintenant main.

# Hello helloworld

def helloworld(name):
    print('Hello %'.format(name)

if __name__ == "__main__":
    import sys
    helloworld(str(sys.argv[1]))

sys.argv[1] va prendre l’argument et le passer à la definition. voici l’exemple complet.

$ python hello.py Dan
hello Dan

Lorsque vous lancez la commande précédente, Python va compiler le script et vous créer un fichier .pyc ce qui accélère le chargement des modules. Python compare les dates de modification du fichier source et de sa version compilée pour voir si le module doit être recompilé.

Python est accompagné d’une plétore de modules qui sont décrit dans la documentation de Python.

La fonction dir() permet de savoir quels sont les noms utilisés dans un modules.

>>> import hello
>>> dir(hello)
['__name__', 'helloworld']

Les paquets

Les paquets sont une façon d’organiser votre code et le nommage de vos modules. Par exemple A.B désigne le sous modules B du paquets A.

Prenons la hiérachie des fichiers suivants:

text/
   _init__.py
   format/
      __init__.py
      html.py
      markdown.py
      yml.py
   filter/
      __init__.py
      strimspace.py

Lorsque vous importez des paquets, Python cherche dans chaque dossier de sys.path un sous-dossier du nom du paquet. Les fichiers init.py sont nécessaire pour que Python puisse considérer le dossier comme paquet. Vous pourrez donc importer vos fichiers comme cela et pour l’utiliser, vous devrez utilser son nom complet.

import text.format.html
text.format.html.h1('toto')

Une autre manière d’importer un sous module serait :

from text.format import html
html.h1('coucou')

et pour utiliser seulement une fonction, on pourrait faire ceci:

from sound.effects.html import h1
h1('coucou')

Voila qui conclue notre article sur les modules en Python. Amusez-vous bien et à bientôt.