Livre_silo 30 août 2013 16:32 Page 124
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
124
Informatique pour tous
Exercice 5.7 Expliquer pourquoi il n’est pas possible d’écrire une fonction echange qui échange le contenu
des deux variables entières passées en arguments ?
5.2 Mécanismes avancés
5.2.1 Fonctions locales
Il arrive que l’utilisation d’une fonction soit limitée à la définition d’une autre fonction.
On va supposer, par exemple, qu’ on veut écrire une fonction max3 calculant le maximum de
trois entiers. Pour cela, il est élégant de commencer par la définition d’une fonction max2
calculant le maximum de deux entiers, pour l’utiliser ensuite deux fois. Cependant, on ne
souhaite pas nécessairement rendre visible la fonction max2. On la définit donc localement
à la fonction max3, de la manière suivante :
def max3(x, y, z):
def max2(u, v):
if u > v:
return u
else:
return v
return max2(x, max2(y, z))
On parle alors de fonction locale à une autre fonction.
Plus subtilement encore, une fonction locale peut faire référence à des arguments, ou à des
variables locales, de sa fonction englobante :
def f(x, y, z):
a = x * x
def g(n):
return n + a
return g(y) + g(z)
5.2.2 Fonctions comme valeurs de première classe
En Python, une fonction est une valeur comme une autre, c’est-à-dire qu’elle peut être
passée en argument, renvoyée comme résultat ou encore stockée dans une variable. On dit
que les fonctions sont des valeurs de première classe.
Une application directe est la définition d’un opérateur mathématique par une fonction.
Par exemple, la somme
∑ n
i=0 f (i), pour une fonction f quelconque, peut être ainsi définie :
def somme_fonction(f, n):
s = 0
for i in range(n+1):
s = s + f(i)
return s
Précédent

- 137/402

Suivant