Livre_silo 30 août 2013 16:32 Page 123
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
123
5 – Fonctions
De manière plus surprenante, la variable a contient toujours la valeur 4 après l’appel à
print(f(a)). En effet, on part de l’état suivant :
. .
4 .
a
Immédiatement après l’appel à f(a), on se retrouve dans un état :
. .
4 .
a
. .
4 .
x
Une nouvelle variable x a reçu la valeur de a. Après l’instruction x = x + 1, on se retrouve
dans l’état :
. .
4 .
a
. .
5 .
x
Seule x a été modifiée. La fonction f renvoie alors la valeur de x, soit 5, puis x disparaît et
on se retrouve dans l’état de départ :
. .
4 .
a
De ce point de vue, il n’y a pas de différence entre un paramètre formel et une variable
locale : les deux ont une durée de vie limitée à l’appel de la fonction.
Ce mécanisme de transmission des arguments s’appelle le passage par valeur, car c’est seulement la valeur de l’argument effectif qui est transmise à la fonction appelée, et non l’argument effectif lui-même.
ATTENTION Liaison dynamique en Python
On considère le programme suivant qui définit une fonction f appelée depuis une fonction g :
def f():
print('fonction 1')
def g():
f()
Sans surprise, le message 'fonction 1' s’affiche si on appelle g(). Rien n’empêche de redéfinir ensuite la fonction f, par exemple pour qu’elle affiche plutôt 'fonction 2' :
def f():
print('fonction 2')
De manière plus surprenante, c’est maintenant le message 'fonction 2' qui est affiché
quand on appelle de nouveau g(), alors qu’il s’agit toujours de la même fonction g. On
appelle ce phénomène la liaison dynamique. Dit simplement, au moment de l’appel à une
fonction f, Python en considère la dernière définition.
D’autres langages de programmation proposent au contraire une liaison statique où, dans
l’exemple précédent, c’est toujours la fonction f initiale qui est appelée par la fonction g et
donc toujours 'fonction 1' qui est affiché.
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
123
5 – Fonctions
De manière plus surprenante, la variable a contient toujours la valeur 4 après l’appel à
print(f(a)). En effet, on part de l’état suivant :
. .
4 .
a
Immédiatement après l’appel à f(a), on se retrouve dans un état :
. .
4 .
a
. .
4 .
x
Une nouvelle variable x a reçu la valeur de a. Après l’instruction x = x + 1, on se retrouve
dans l’état :
. .
4 .
a
. .
5 .
x
Seule x a été modifiée. La fonction f renvoie alors la valeur de x, soit 5, puis x disparaît et
on se retrouve dans l’état de départ :
. .
4 .
a
De ce point de vue, il n’y a pas de différence entre un paramètre formel et une variable
locale : les deux ont une durée de vie limitée à l’appel de la fonction.
Ce mécanisme de transmission des arguments s’appelle le passage par valeur, car c’est seulement la valeur de l’argument effectif qui est transmise à la fonction appelée, et non l’argument effectif lui-même.
ATTENTION Liaison dynamique en Python
On considère le programme suivant qui définit une fonction f appelée depuis une fonction g :
def f():
print('fonction 1')
def g():
f()
Sans surprise, le message 'fonction 1' s’affiche si on appelle g(). Rien n’empêche de redéfinir ensuite la fonction f, par exemple pour qu’elle affiche plutôt 'fonction 2' :
def f():
print('fonction 2')
De manière plus surprenante, c’est maintenant le message 'fonction 2' qui est affiché
quand on appelle de nouveau g(), alors qu’il s’agit toujours de la même fonction g. On
appelle ce phénomène la liaison dynamique. Dit simplement, au moment de l’appel à une
fonction f, Python en considère la dernière définition.
D’autres langages de programmation proposent au contraire une liaison statique où, dans
l’exemple précédent, c’est toujours la fonction f initiale qui est appelée par la fonction g et
donc toujours 'fonction 1' qui est affiché.
