{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "[home](../index.ipynb) | [next: *String Services*](stdlib-string-services.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Qu'est-ce qu'un module ?\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Un module est un ensemble de fonctions et classes dédiées à une tâche précise rangées sous un même nom.\n", "\n", "## Utilisation" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "module" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Pour importer un module, on utilise la command `import`\n", "import math\n", "type(math)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.141592653589793" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Tout élément du module est accessible via le `.`\n", "math.pi" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.718281828459045" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.e" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.4142135623730951" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.sqrt(2)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "raises-exception" ] }, "source": [ "On peut n'importer que certains éléments du module" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [ "raises-exception" ] }, "outputs": [ { "ename": "NameError", "evalue": "name 'e' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[5], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m# e n'est pas défini pour le moment, seulement math.e\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m \u001b[43me\u001b[49m\n", "\u001b[1;31mNameError\u001b[0m: name 'e' is not defined" ] } ], "source": [ "# e n'est pas défini pour le moment, seulement math.e\n", "e" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from math import cos, e, pi" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.718281828459045" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# désormais e est défini, même valeur que math.e\n", "e" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1.0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cos(pi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Mais** on préfèrera l'utilisation du `.` pour une meilleure traçabilité." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Les *Standard Libraries*\n", "\n", "Python dispose de nombreuses librairies par défaut, qui couvrent une grande variété de besoins.\n", "\n", "## Les modules tierces\n", "En plus des modules standards, on trouve les [modules tiers](modules-tiers.ipynb) dont une grande part est [offerte](https://fr.wikipedia.org/wiki/Free/Libre_Open_Source_Software) par la communauté." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Créer un module\n", "\n", "Un module simple est un fichier Python normal. On peut donc créer facilement ses propres modules. Il suffit de le placer au bon endroit.\n", "\n", "L'instruction \n", "``` python\n", "import monbomodule\n", "```\n", "cherche le fichier `monbomodule.py` à 2 endroits :\n", "\n", "1. dans le répertoire où se trouve le script qui fait l'import\n", "2. dans les répertoires où sont **installés** les modules standards et tierce\n", "\n", "Il suffit de mettre son module au même endroit que sont script.\n", "\n", "### Note : package\n", "Si vous travaillez trop fort, vous risquez d'avoir trop de modules. Dans ce cas, il faut créer un [package](https://docs.python.org/2/tutorial/modules.html#packages), ce qui consiste principalement mettre les modules dans un répertoire.\n", "\n", "## Pourquoi créer un module ?\n", "- Pour structurer son code\n", "\n", " - ranger les fonctions qui marchent ensemble au même endroit\n", " - séparer les choses qui n'ont rien à voir entre elles\n", " - => un code plus facile à lire et augmenter\n", "\n", " \n", "- Pour réutiliser son code\n", "\n", " - debugger une seule fonction pour corriger tous les scripts qui s'en servent = souffrance / 10\n", " - améliorer une seule fonction pour accélérer tous les scripts qui s'en servent = bonheur * 10\n", " - => karma * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercices\n", "\n", "**Mon premier module**: rédiger un module qui comprend la fonction `double`, et l'utiliser dans Python" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 4 }