Chapitre 12 - Introduction aux modules
======================================

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.

Créons un fichier `bonjour.py` contenant seulement une assignation
d'une variable `a` à l'entier 42 ::

    # Dans bonjour.py
    a = 42

Comme un fichier = un module, on vient de crée un module ``bonjour`` contenant une variable ``a``.

Si maintenant on crée un fichier ``salutations.py`` dans le même répertoire,
on peut accéder à cette variable en *important* le module::

    # Dans salutations.py
    import bonjour
    print(bonjour.a)
    # affiche: 42


.. note::

  Le nom du module est écrit directement, ce n'est *pas* une
  chaîne de caractères.

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``::

    # Dans bonjour.py
    a = 42
    def dire_bonjour():
        print("Bonjour!")

On peut appeler la fonction ``dire_bonjour`` depuis ``salutations.py``
en utilisant l'attribut ``dire_bonjour`` du module ``bonjour``::

   # Dans salutations.py
   import bonjour
   bonjour.dire_bonjour()
   # affiche: Bonjour!

Les imports ne sont faits qu'une seule fois
-------------------------------------------

Il est important de noter que:

* **tout** le code à l'intérieur d'un module est éxécuté lors du premier import
* mais il 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::

    # Dans bonjour.py
    print("Je suis le module bonjour et tu viens de m’importer")
    def dire_bonjour():
        ....

.. code-block:: python

    # Dans salutation.py
    import bonjour
    # affiche: Je suis le module bonjour et tu viens de m’importer

    import bojour
    # n'affiche rien


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 la traduction en Français est en cours:

https://docs.python.org/fr/3/library/index.html

Mettez ce lien dans vos favoris - il vous sera très utile.

Quelques exemples de modules de la bibliothèque standard
---------------------------------------------------------

Easter eggs
++++++++++++

(Ou fonctionnalités cachées)

* ``import antigravity``
* ``import this``

Je vous laisse découvrir ce que fait le premier. Quant au deuxième, il contient
une liste de préceptes que la plupart des développeurs Python s'efforcent de
respecter. On en reparlera ...

