Livre_silo 30 août 2013 16:32 Page 125
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
125
5 – Fonctions
Pour calculer la somme des carrés des entiers de 1 à 10, on commence par définir une
fonction carre.
def carre(x):
return x*x
Puis, on la passe en argument à la fonction somme_fonction :
In [3]: somme_fonction(carre, 10)
Out[3]: 385
On peut même éviter de nommer la fonction carre, puisqu’elle est réduite à une simple
expression, en utilisant une fonction anonyme. Une telle fonction s’écrit lambda x: e, où e est
une expression pouvant comporter la variable x. Elle désigne la fonction x → e(x). Ainsi
l’exemple précédent se réécrit-il plus simplement :
In [4]: somme_fonction(lambda x: x*x, 10)
Out[4]: 385
De même qu’ on peut passer une fonction en argument, on peut renvoyer une fonction
comme résultat. En particulier, il est possible d’écrire une fonction qui prend comme arguments deux fonctions f et g et qui renvoie la composée f ◦ g :
def composee(f, g):
def h(x):
return f(g(x))
return h
Là encore, on simplifie l’écriture en utilisant une fonction anonyme :
def composee(f, g):
return lambda x: f(g(x))
Il est maintenant possible de composer la fonction carre avec elle-même et de stocker le
résultat dans une variable a :
In [5]: a = composee(carre, carre)
Ensuite, on applique la fonction contenue dans a à un argument :
In [6]: a(4)
Out[6]: 256
Les fonctions de première classe servent à exprimer de façon élégante des algorithmes
génériques qu’ on serait sinon obligé de réécrire pour chaque fonction. Des exemples d’application en sont donnés dans les chapitres 8 et 9.
Exercice 5.8 * Écrire une fonction derive qui prend en argument une fonction f et un flottant ϵ > 0 et
renvoie la fonction :
x →
f (x + ϵ) − f (x)
ϵ
Vérifier que la fonction renvoyée par derive(carre, 0.001) est effectivement une approximation de x →
2x.
Précédent

- 138/402

Suivant