From 508392a55850323ee30424efa22e2d7ae4fbc416 Mon Sep 17 00:00:00 2001 From: Dimitri Merejkowsky Date: Wed, 18 Mar 2020 10:22:56 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9corateurs:=20work=20in=20progress?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../01-functions.rst | 0 .../02-portée-des-variables.rst | 0 .../03-plusieurs-arguments.rst | 0 .../04-par-défaut.rst | 0 .../05-fonctions-natives.rst | 0 .../06-return.rst | 0 .../index.rst | 4 +- cours/source/12-modules-01/index.rst | 4 +- .../19-functions-02/01-introduction.rst | 117 ++++++++++++++++++ .../19-functions-02/02-décorateurs.rst | 23 ++++ cours/source/19-functions-02/index.rst | 12 ++ cours/source/index.rst | 3 +- 12 files changed, 158 insertions(+), 5 deletions(-) rename cours/source/{06-fonctions => 06-fonctions-01}/01-functions.rst (100%) rename cours/source/{06-fonctions => 06-fonctions-01}/02-portée-des-variables.rst (100%) rename cours/source/{06-fonctions => 06-fonctions-01}/03-plusieurs-arguments.rst (100%) rename cours/source/{06-fonctions => 06-fonctions-01}/04-par-défaut.rst (100%) rename cours/source/{06-fonctions => 06-fonctions-01}/05-fonctions-natives.rst (100%) rename cours/source/{06-fonctions => 06-fonctions-01}/06-return.rst (100%) rename cours/source/{06-fonctions => 06-fonctions-01}/index.rst (69%) create mode 100644 cours/source/19-functions-02/01-introduction.rst create mode 100644 cours/source/19-functions-02/02-décorateurs.rst create mode 100644 cours/source/19-functions-02/index.rst diff --git a/cours/source/06-fonctions/01-functions.rst b/cours/source/06-fonctions-01/01-functions.rst similarity index 100% rename from cours/source/06-fonctions/01-functions.rst rename to cours/source/06-fonctions-01/01-functions.rst diff --git a/cours/source/06-fonctions/02-portée-des-variables.rst b/cours/source/06-fonctions-01/02-portée-des-variables.rst similarity index 100% rename from cours/source/06-fonctions/02-portée-des-variables.rst rename to cours/source/06-fonctions-01/02-portée-des-variables.rst diff --git a/cours/source/06-fonctions/03-plusieurs-arguments.rst b/cours/source/06-fonctions-01/03-plusieurs-arguments.rst similarity index 100% rename from cours/source/06-fonctions/03-plusieurs-arguments.rst rename to cours/source/06-fonctions-01/03-plusieurs-arguments.rst diff --git a/cours/source/06-fonctions/04-par-défaut.rst b/cours/source/06-fonctions-01/04-par-défaut.rst similarity index 100% rename from cours/source/06-fonctions/04-par-défaut.rst rename to cours/source/06-fonctions-01/04-par-défaut.rst diff --git a/cours/source/06-fonctions/05-fonctions-natives.rst b/cours/source/06-fonctions-01/05-fonctions-natives.rst similarity index 100% rename from cours/source/06-fonctions/05-fonctions-natives.rst rename to cours/source/06-fonctions-01/05-fonctions-natives.rst diff --git a/cours/source/06-fonctions/06-return.rst b/cours/source/06-fonctions-01/06-return.rst similarity index 100% rename from cours/source/06-fonctions/06-return.rst rename to cours/source/06-fonctions-01/06-return.rst diff --git a/cours/source/06-fonctions/index.rst b/cours/source/06-fonctions-01/index.rst similarity index 69% rename from cours/source/06-fonctions/index.rst rename to cours/source/06-fonctions-01/index.rst index bf83627..705ed08 100644 --- a/cours/source/06-fonctions/index.rst +++ b/cours/source/06-fonctions-01/index.rst @@ -1,5 +1,5 @@ -Chapitre 6 - Fonctions -====================== +Chapitre 6 - Introduction aux fonctions +======================================= .. toctree:: :maxdepth: 1 diff --git a/cours/source/12-modules-01/index.rst b/cours/source/12-modules-01/index.rst index bad1782..87d8634 100644 --- a/cours/source/12-modules-01/index.rst +++ b/cours/source/12-modules-01/index.rst @@ -1,5 +1,5 @@ -Chapitre 12 - Modules - 1ère partie -=================================== +Chapitre 12 - Introduction aux modules +====================================== Un fichier = un module ------------------------ diff --git a/cours/source/19-functions-02/01-introduction.rst b/cours/source/19-functions-02/01-introduction.rst new file mode 100644 index 0000000..987061f --- /dev/null +++ b/cours/source/19-functions-02/01-introduction.rst @@ -0,0 +1,117 @@ +Jouons avec les fonctions +========================= + +Introduction +------------ + +Reprenons ce qu'on a vu jusqu'ici. + +D'une part, on peut créer des variables en les assignant à une valeur:: + + # Création d'une variable `x` avec la valeur 4 + x = 4 + + +D'autre part, on peut définir et appeler des fonctions:: + + # Définition de la fonction: + def dire_bonjour(nom): + print("Bonjour " + nome + + # Appel + dire_bonjour("Max") + + # Affiche: "Bonjour Max" + + +Fonctions en tant que variables +------------------------------- + +Il se trouve qu'en Python, on peut assigner des variables à ... des fonctions + +.. code-block:: python + + # Définition d'une fonction `dire_bonjour_en_français` + def dire_bonjour_en_français(nom): + print("Bonjour " + nom) + + # Définition d'une fonction `dire_bonjour_en_anglais` + def dire_bonjour_en_anglais(nom): + print("Hello " + nom) + + # Création d'une variable qui pointe sur la fonction française: + ma_fonction_qui_dit_bonjour = dire_bonjour_en_français + + # Appel de la fonction: + ma_fonction_qui_dit_bonjour("Max") + + # Affiche: Bonjour Max + + +De façon cruciale, notez que l'on n'a *pas* mis de parenthèses à droite +lorsqu'on a créé la variable `ma_fonction_qui_dit_bonjour`. + +On peut donc dire que lorsqu'on définit une fonction avec `def()` et un corps +il y a en réalité deux étapes: + +1. Python stocke le corps de la fonction quelque part +2. Il crée une variable pointant vers ce corps + +En Python, il est assez fréquent d'utiliser de code tel que celui-ci, souvent avec un dictionnaire: + +Fonctions en tant qu'argement d'autres fonctions +------------------------------------------------ + +On a vu en début de chapitre qu'on peut créé des variables qui pointent +vers des fonctions. + +Du coup, rien n'empêche de les passer en *argument* d'autres fonctions. + +Par exemple:: + + def appelle_deux_fois(f): + f() + f() + + + def crier(): + print("Aline !") + + appelle_deux_fois(crier) + + # Affiche: + # Aline ! + # Aline ! + + +Fonctions imbriquées +-------------------- + +On peut aussi définir une fonction dans une autre fonction:: + + TODO + + +Fonctions retournant des fonctions +---------------------------------- + +Enfin, on peut retourner une fonction depuis une autre fonction:: + + def fabrique_fonction_qui_additionne(n): + def fonction_résultat(x): + return x + n + return fonction_résultat + + + additionne_2 = fabrique_fonction_qui_additionne(2) + y = additionne_2(5) + print(y) + # Affiche: 7 + + +Un autre paradigme +------------------- + +Le fait qu'on puisse traiter les fonctions comme n'importe quelle +autre valeur (c'est-à-dire les assigner à des variables, les passer +en argument et les retourner) diff --git a/cours/source/19-functions-02/02-décorateurs.rst b/cours/source/19-functions-02/02-décorateurs.rst new file mode 100644 index 0000000..d209bdd --- /dev/null +++ b/cours/source/19-functions-02/02-décorateurs.rst @@ -0,0 +1,23 @@ +Fonctions en tant qu'argement d'autres fonctions +================================================ + +On a vu en début de chapitre qu'on peut créé des variables qui pointent +vers des fonctions. + +Du coup, rien n'empêche de les passer en *argument* d'autres fonctions. + +Par exemple:: + + def appelle_deux_fois(f): + f() + f() + + + def crier(): + print("Aline !") + + appelle_deux_fois(crier) + + # Affiche: + # Aline ! + # Aline ! diff --git a/cours/source/19-functions-02/index.rst b/cours/source/19-functions-02/index.rst new file mode 100644 index 0000000..b9e086d --- /dev/null +++ b/cours/source/19-functions-02/index.rst @@ -0,0 +1,12 @@ +Chapitre 19 - Décorateurs +========================= + +.. toctree:: + :maxdepth: 1 + + 01-introduction + + + + + diff --git a/cours/source/index.rst b/cours/source/index.rst index 5691467..b8a5ff3 100644 --- a/cours/source/index.rst +++ b/cours/source/index.rst @@ -22,7 +22,7 @@ remarques. 03-variables-et-types/index 04-booléens/index 05-flot-de-controle/index - 06-fonctions/index + 06-fonctions-01/index 07-listes/index 08-none-et-pass/index 09-dictionnaires/index @@ -35,3 +35,4 @@ remarques. 16-interpréteur-interactif/index 17-sockets/index 18-classes-03/index + 19-functions-02/index