|
|
@@ -0,0 +1,120 @@ |
|
|
|
% Les modules en Python - Partie 1 |
|
|
|
% Dimitri Merejkowsky |
|
|
|
|
|
|
|
# Un fichier = un module |
|
|
|
|
|
|
|
Et oui, vous faites des modules sans le savoir depuis le début :) |
|
|
|
|
|
|
|
Un fichier `foo.py` correspond *toujours* module `foo` |
|
|
|
|
|
|
|
**Attention: Ce n'est pas tout à fait réciproque. Le module `foo` peut venir d'autre chose |
|
|
|
qu'un fichier foo.py.** |
|
|
|
|
|
|
|
# Importer un module |
|
|
|
|
|
|
|
Ou: accéder à du code provenant d'un *autre* fichier source. |
|
|
|
|
|
|
|
Imaginons un fichier bonjour.py` contenant seulement une assignation |
|
|
|
d'une variable `a` à l'entier 42 |
|
|
|
```python |
|
|
|
# Dans bonjour.py |
|
|
|
a = 42 |
|
|
|
``` |
|
|
|
|
|
|
|
On peut accéder à cette variable en important le module, par |
|
|
|
exemple depuis l'interpréteur: |
|
|
|
|
|
|
|
```python |
|
|
|
>>> import bonjour |
|
|
|
>>> bonjour.a |
|
|
|
42 |
|
|
|
``` |
|
|
|
|
|
|
|
On voit que l'assignation de la variable `a` dans `bonjour.py` est devenue |
|
|
|
un *attribut* du module `bonjour` lorsque `bonjour` a été importé |
|
|
|
|
|
|
|
Si maintenant on rajoute une fonction `dire_bonjour` dans `bonjour.py`: |
|
|
|
|
|
|
|
```python |
|
|
|
# toujours dans bonjour.py |
|
|
|
a = 42 |
|
|
|
a = 42 |
|
|
|
def dire_bonjour(): |
|
|
|
print("Bonjour!") |
|
|
|
``` |
|
|
|
|
|
|
|
On peut appeler la fonction `dire_bonjour` depuis l'interpréteur en accédant |
|
|
|
à l'attribut `dire_bonjour` du module `bonjour`: |
|
|
|
|
|
|
|
```python |
|
|
|
>>> import bonjour |
|
|
|
>>> bonjour.dire_bonjour() |
|
|
|
Bonjour! |
|
|
|
``` |
|
|
|
|
|
|
|
# Différence avec la commande python |
|
|
|
|
|
|
|
Notez bien que lancer l'interpréteur et taper `import bonjour` dedans n'est pas |
|
|
|
la même chose que lancer `python bonjour.py`. |
|
|
|
|
|
|
|
Dans le deuxième cas, tout le code dans `bonjour.py` est exécuté, puis la commande python |
|
|
|
se termine. |
|
|
|
|
|
|
|
Dans le cas de l'interpréteur, on peut utiliser tous les attributs du module et appeler |
|
|
|
les fonctions autant de fois qu'on veut: |
|
|
|
|
|
|
|
```python |
|
|
|
>>> import bonjour |
|
|
|
>>> bonjour.dire_bonjour() |
|
|
|
Bonjour! |
|
|
|
>>> bonjour.dire_bonjour() |
|
|
|
Bonjour! |
|
|
|
``` |
|
|
|
|
|
|
|
On peut aussi modifier les valeurs des attributs: |
|
|
|
|
|
|
|
```python |
|
|
|
>>> import bonjour |
|
|
|
>>> bonjour.a |
|
|
|
42 |
|
|
|
>>> bonjour.a = 36 |
|
|
|
>>> bonjour.a |
|
|
|
36 |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Les imports ne sont faits qu'une seule fois |
|
|
|
|
|
|
|
Il est important de noter que le code à l'intérieur d'un |
|
|
|
module n'est *pas* ré-éxécuté si le module a déjà été |
|
|
|
importé auparavant. |
|
|
|
|
|
|
|
On peut le voir en mettant du code dans `bonjour.py`, |
|
|
|
en plus des simples définitions de fonctions et assignations |
|
|
|
de variables |
|
|
|
```python |
|
|
|
# Dans bonjour.py |
|
|
|
print("Je suis le module bonjour et tu viens de m’importer") |
|
|
|
``` |
|
|
|
|
|
|
|
```python |
|
|
|
>>> import bonjour |
|
|
|
Je suis le module foo et tu viens de m’importer |
|
|
|
>>> import bonjour |
|
|
|
<rien> |
|
|
|
``` |
|
|
|
|
|
|
|
Il faudra donc redémarrer l'interpréteur à chaque fois que le code dans `bonjour.py` change. |
|
|
|
|
|
|
|
# La bibliothèque standard |
|
|
|
|
|
|
|
La bibliothèque standard est une collection de modules directement utilisables fournis à l'installation de Python. |
|
|
|
|
|
|
|
Exemple: `sys`, `random`, ... |
|
|
|
|
|
|
|
Toute la bibliothèque standard est documentée - et en Français depuis peu: |
|
|
|
|
|
|
|
https://docs.python.org/fr/3/library/index.html |
|
|
|
|
|
|
|
Mettez ce lien dans vos favoris - il vous sera très utile. |