{ "cells": [ { "cell_type": "markdown", "id": "b0f513b0", "metadata": {}, "source": [ "# Fonctions en Python" ] }, { "cell_type": "markdown", "id": "635dfb11", "metadata": {}, "source": [ "Afin de simplifier la lecture et la validation des programmes, il est possible de créer des fonctions, utilisant ou non des paramètres." ] }, { "cell_type": "code", "execution_count": null, "id": "ee9c27ca", "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "id": "b85a093a", "metadata": {}, "source": [ "## Première fonction" ] }, { "cell_type": "markdown", "id": "b94c9cdc", "metadata": {}, "source": [ "On souhaite écrire une fonction qui calcule la somme de deux nombres passés en paramètre.\n", "\n", "*Ce exemple est un cas simple sans réel intérêt, l'addition se faisant qu'en une seule ligne en Python*" ] }, { "cell_type": "markdown", "id": "33463a65", "metadata": {}, "source": [ "### Définition d'une fonction" ] }, { "cell_type": "markdown", "id": "70088684", "metadata": {}, "source": [ "La déclaration de la fonction se fait de la façon suivante :" ] }, { "cell_type": "code", "execution_count": null, "id": "92e921d1", "metadata": {}, "outputs": [], "source": [ "def somme(a, b):\n", " c = a + b\n", " return c" ] }, { "cell_type": "markdown", "id": "151fd8b8", "metadata": {}, "source": [ "### Utilisation d'une fonction" ] }, { "cell_type": "markdown", "id": "6f6d898b", "metadata": {}, "source": [ "Nous avons déjà utilisé quelques fonctions déjà écrites pour vous : print, array..." ] }, { "cell_type": "code", "execution_count": null, "id": "3237f013", "metadata": {}, "outputs": [], "source": [ "k = somme(2, 3)\n", "print(k)" ] }, { "cell_type": "markdown", "id": "1ccb6170", "metadata": {}, "source": [ "## Fonctions et vecteurs" ] }, { "cell_type": "markdown", "id": "08a6faa2", "metadata": {}, "source": [ "> Que se passe-t-il si on passe deux vecteurs à cette fonction ?" ] }, { "cell_type": "code", "execution_count": null, "id": "27b45089", "metadata": {}, "outputs": [], "source": [ "va = np.arange(10)\n", "vb = np.arange(10)" ] }, { "cell_type": "code", "execution_count": null, "id": "0ba5a478", "metadata": {}, "outputs": [], "source": [ "# TO DO" ] }, { "cell_type": "markdown", "id": "116637e8", "metadata": {}, "source": [ "## Documentation ses fonctions" ] }, { "cell_type": "markdown", "id": "4ccfa29f", "metadata": {}, "source": [ "La création de fonctions a un intérêt dans la **lecture des programmes**, mais également pour la **réutilisation de certaines parties du code** dans d'autres applications.\n", "\n", "Lorsque vous souhaiterez revenir sur ces fonctions (d'ici quelques jours, quelques mois...) ou les distribuer à des personnes tierces (collègues de travail, communauté de programmeurs...), il ne sera pas évident de retrouver l'objectif et le fonctionnement de ces fonctions.\n", "\n", "Pour faciliter cette démarche, il est indispensable de bien commenter et documenter vos différentes fonctionnalités.\n", "\n", "POur cela, il existe différentes conventions dont la principale est l'utilisation du format ***docstring***. Cette convention est réutilisée dans différentes interfaces de développement comme **Spyder** ou **PyCharm**. " ] }, { "cell_type": "markdown", "id": "50122ec7", "metadata": {}, "source": [ "Il est également possible de **regrouper ses différentes fonctions** dans des fichiers séparés (puis par la suite dans des modules/packages) par thématique.\n", "\n", "*Sous Jupyter, l'intérêt de documenter ses fonctions est moins évident.*" ] }, { "cell_type": "markdown", "id": "ea902207", "metadata": {}, "source": [ "Voici ce que donne la documentation de la fonction *somme* écrite précédemment." ] }, { "cell_type": "code", "execution_count": null, "id": "94184954", "metadata": {}, "outputs": [], "source": [ "def somme(a, b):\n", " '''\n", " Return the sum of a and b\n", "\n", " Parameters\n", " ----------\n", " a : int or float\n", " first term of the addition.\n", " b : int or float\n", " second term of the addition.\n", "\n", " Returns\n", " -------\n", " int or float\n", " Return the sum of a and b.\n", "\n", " '''\n", " return a+b" ] }, { "cell_type": "markdown", "id": "c5fc5dc9", "metadata": {}, "source": [ "> Dès à présent, pensez à documenter l'ensemble de vos fonctions de cette manière. Vous gagnerez un précieux temps dans les prochains jours, mois, années..." ] }, { "cell_type": "markdown", "id": "90751b3a", "metadata": {}, "source": [ "## Portée des variables" ] }, { "cell_type": "markdown", "id": "ab2d325b", "metadata": {}, "source": [ "Soit la fonction suivante :" ] }, { "cell_type": "code", "execution_count": null, "id": "327e3208", "metadata": {}, "outputs": [], "source": [ "def multiply(a, b):\n", " c = a * b\n", " return c" ] }, { "cell_type": "markdown", "id": "11c94e06", "metadata": {}, "source": [ "> Que donne l'instruction suivante ? Est-ce normal ?" ] }, { "cell_type": "code", "execution_count": null, "id": "4056de60", "metadata": {}, "outputs": [], "source": [ "print(c)" ] }, { "cell_type": "markdown", "id": "6fdd5a8f", "metadata": {}, "source": [ "*c* est une variable locale à la fonction multiply. Elle n'est pas accessible depuis l'extérieur de cette fonction. On parle de **variable locale**." ] }, { "cell_type": "markdown", "id": "93402f6d", "metadata": {}, "source": [ "Un autre exemple avec la fonction show_var :" ] }, { "cell_type": "code", "execution_count": null, "id": "8c975372", "metadata": {}, "outputs": [], "source": [ "def show_var():\n", " print(a)" ] }, { "cell_type": "code", "execution_count": null, "id": "7ffce7b2", "metadata": {}, "outputs": [], "source": [ "show_var()" ] }, { "cell_type": "code", "execution_count": null, "id": "8eef56a6", "metadata": {}, "outputs": [], "source": [ "a = 3\n", "show_var()" ] }, { "cell_type": "markdown", "id": "99c495b7", "metadata": {}, "source": [ "*a* devient une **variable globale**, utilisable par toutes les fonctions du programme, à partir du moment où elle est définie." ] } ], "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.9.16" } }, "nbformat": 4, "nbformat_minor": 5 }