|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 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)
|