09 Cours Fonctions Compléments
Pour aller plus loin sur les paramètres⚓︎
Utilisation de valeurs par défaut⚓︎
def somme(x, y=1):
return x + y
print(somme(1, 2))
3
Si sa valeur n’est pas spécifiée lors de l’appel, le paramètre y prend la valeur
par défaut (ici : 1)
print(somme(4))
5
Remarque. Les paramètres ayant une valeur par défaut doivent être placés en dernier.
Utilisation des paramètres par leur nom⚓︎
Si les paramètres sont explicitiment nommés lors de l’appel, leur ordre peut être changé :
print(somme(y = 7, x = 4))
11
Objet fonctions⚓︎
Une fonction définie est un objet que l'on peut utiliser, passer en paramètre, etc.\
On considère un cas où on a une fonction, qui prend en paramètre une fonction.
Par exemple,
def applique(f, x):
return f(x)
On peut appeler cette fonction en lui passant en paramètre une fonction nommée définie préalablement :
def f1(x):
return 2*x+1
def f2(x):
return 3*x**2
applique(f1, 5) ### renvoie f1(5) = 11
applique(f2, 5) ### renvoie f2(5) = 75
Cela fonction aussi pour les fonctions natives :
applique(max, [1, 2, 3]) ### renvoie max([1, 2, 3]) = 3
Fonctions lambdas⚓︎
Les lambdas, en Python, sont de petites fonctions anonymes, soumises à une syntaxe plus restrictive mais plus concise que les fonctions Python normales.
C'est une syntaxe Python pour définir une fonction sans la nommer.
La syntaxe se rapproche de la notation mathématique "on définit une fonction qui à \(x\) associe \(3x - 2\), qui se note en mathématiques "on définit une fonction \(x \longmapsto 3x - 2\).
En Python, on écrit : lambda x : 3*x - 2.
Une fonction lambda peut également prendre plusieurs paramètres :
lambda x, y: x + y
print((lambda x, y: x + y)(2, 5)) #7
On peut utiliser ce type de fonction lambda en paramètre de la fonction applique précédente :
applique(lambda x : 2*x+1, 5) ### renvoie 2*5+1 = 11
Bonnes pratiques en programmation⚓︎
- Découper le code en fonctions de maximum une page, avec des noms explicites sur leur rôle
- Un code que l'on a écrit plusieurs fois doit être factorisé par une fonction
- Ne pas hésiter à extraire les expressions booléennes dans des fonctions avec un nom explicite
- Ne pas hésiter à extraire les boucles vers des fonctions
Factoriser du code⚓︎
par exemple, au lieu de :
print("Lundi, j'amène mes affaires et je suis attentif en classe.")
print("Mardi, j'amène mes affaires et je suis attentif en classe.")
print("Mercredi, j'amène mes affaires et je suis attentif en classe.")
print("Jeudi, j'amène mes affaires et je suis attentif en classe.")
print("Vendredi, j'amène mes affaires et je suis attentif en classe.")
On peut créer une fonction :
def affiche_ligne(jour):
print(jour+", j'amène mes affaires et je suis attentif en classe.")
affiche_ligne("Lundi")
affiche_ligne("Mardi")
affiche_ligne("Mercredi")
affiche_ligne("Jeudi")
affiche_ligne("Vendredi")
Remarque : Ce qui est commun aux différentes instructions se retrouve écrit une unique fois, un peu comme \(x\) n'est écrit qu'une seule fois lorsqu'on factorise l'expression \(x \times y + x \times z = x \times (y + z)\).