{"cells":[{"metadata":{},"cell_type":"markdown","source":["# Travailler avec les fonctions (2) : créer un module de fonctions\n","\n","## 1- Créer un module de fonctions :\n","\n","Nous sommes maintenant en possession de 4 fonctions qui calculent des surfaces de formes élementaires (carré, rectangle, triangle, disque). \n","\n","Pour pouvoir **les réutiliser dans différents programmes**, on va les placer *ensemble dans un fichier d'extension '.py'*. \n","\n","Ce fichier porte alors le nom de **module de fonctions**. \n","\n","Ce sera un module de fonctions personnel mais qui s'utilisera de la même façon qu'un module tel que le module math fourni par Python.\n","\n","Par souci de simplification, on placera le module de fonction dans le **même dossier** que le fichier du programme qui l'utilise. (ici on placera notre module de fonctions dans le dossier **Notebooks** pour pouvoir l'appeler à partir d'un notebook)\n","\n","Dans VSCodium ouvrir un nouvel onglet avec la commande clavier CTRL + N \n","\n"," 1- **Ecrire la docstring** du module, par exemple :\n","\n","```Python\n","\"\"\" module de fonctions pour calculer des surfaces \"\"\"\n","```\n","\n"," 2- **ajouter l'importation du module math** (nécessaire pour le calcul de la surface d'un disque) :\n","\n","```Python\n","import math\n","```\n","\n"," 3- **ajouter les 4 définitions des fonctions** de calcul de surfaces réalisées dans le notebook *1nsi_7_fonction_1.ipynb*\n","\n"," 4- **Enregistrer le fichier** avec la commande *CTRL + S* (S = *save*) ou par le menu *File -> Save*.\n"," \n"," Se placer dans le dossier **Notebooks** et lui donner le nom **surfaces.py**\n","\n","\n","\n","Pour pouvoir l'utiliser dans un script Python, il faudra **l'importer**. \n","\n","Ceci se fera en **début de programme**.\n","\n","Il existe plusieurs façons d'importer un module de fonctions. La meilleure façon consiste à écrire :\n","\n","```Python\n","import surfaces\n","```\n","\n","(le mot clé *import* est suivi du nom du fichier module sans son *extension* \".py\")\n"," \n"]},{"metadata":{"trusted":false},"cell_type":"code","source":["import surfaces\n","# Pour utiliser un module de fonctions il faut connaître les fonctions\n","# qu'il contient :\n","dir(surfaces)"],"execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":["# ... et savoir rechercher de l'aide sur ce module :\n","help(surfaces)"],"execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":["# ... ou sur une fonction en particulier comme celle dont on aura besoin dans la cellule suivante\n","# pour calculer la surface d'un disque :\n","help(surfaces.surface_disque)"],"execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":["**Remarque :**\n","Toute cette aide est disponible parce que le programmeur a pris soin de **documenter** :\n","\n"," - le module de fonctions par une courte phrase de présentation\n","\n"," - chacune de ses fonctions en rédigeant un(e) **docstring** pour chacune d'elles. Ainsi, il est inutile d'aller voir et comprendre le code de la fonction, l'important est de savoir :\n"," * à quoi sert la fonction\n"," * quels paramètres elle prend en entrée\n"," * ce qu'elle renvoie en sortie\n","\n"," "]},{"metadata":{},"cell_type":"markdown","source":["## 2- Application : nouvelle version du programme calculant le volume d'une maison\n","\n","On demande de reprendre le programme final du notebook **1nsi_7_fonctions_1.ipynb**, mais en utilisant le module de fonctions **surfaces.py** :\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["import ???\n","\n","???\n","...\n","???"]},{"source":["## 3- Modularité en programmation\n","\n","**Ce que l'on doit avoir compris avec ces deux notebooks 1nsi_7_fonctions_1 et _2.ipynb :**\n","\n","\n","Programmer en suivant le **principe de modularité** consiste à:\n","\n"," • découper le code en petites portions sous forme de fonctions (Rque : en Python les\n"," procédures sont aussi appelées fonctions)\n","\n"," • regrouper ces fonctions : dans des fichiers appelés modules de fonctions \n"," (il sera judicieux de faire des regroupements appropriés de fonctions au sein d’un même module)\n","\n"," • à un niveau plus élevé, regrouper les modules en packages ( = bibliothèques)\n","\n","**Intérêts :**\n","\n"," • la phase de test est plus simple : on teste individuellement les fonctions, \n"," puis leur intégration dans un programme spécifique\n"," \n"," • réutilisation du code pour ne pas devoir refaire plusieurs fois la même chose :\n"," cela nécessite néanmoins d’être rigoureux dans le classement et l’archivage des\n"," fonctions et des modules, mais également dans la documentation.\n","\n"],"cell_type":"markdown","metadata":{}}],"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.7.3-final","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":2}