Livre_silo 30 août 2013 16:32 Page 122
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
122
Informatique pour tous
suivant affiche le résultat 2 si les arguments de somme sont évalués de gauche à droite et 3
sinon :
n = 0
def g(x):
global n
n = n + 1
return x + n
def somme(x, y):
return x + y
print(somme(n, g(1)))
Il se trouve qu’ en Python, l’ordre d’évaluation est toujours de la gauche vers la droite. Ce
n’est pas le cas dans d’autres langages de programmation, où il peut être au contraire de
la droite vers la gauche, voire non spécifié. Même en ne considérant que Python, rien ne
garantit que l’ordre d’évaluation ne changera pas dans de prochaines versions. Aussi est-il
important de ne jamais écrire un programme dont le résultat en dépende. Dans l’exemple
précédent, on peut par exemple forcer g(1) à être évaluée en premier, en stockant sa valeur
dans une variable a :
a = g(1)
print(somme(n, a))
Exercice 5.5 Donner un exemple de programme montrant que l’évaluation des arguments de l’opérateur + se fait également de gauche à droite.
Exercice 5.6 Qu’affiche le programme suivant ? Pourquoi ?
def f(x):
global b
b = 10
return x + 1
a = 3
b = 4
print(f(a)+b)
Proposer une adaptation de ce programme dans laquelle le résultat affiché ne dépend pas de l’ordre
d’évaluation.
5.1.4 Passage par valeur
On considère la fonction f suivante, qui incrémente son argument x et en renvoie ensuite
la valeur :
def f(x):
x = x + 1
return x
Alors le programme :
a = 4
print(f(a))
affiche sans surprise la valeur 5.
Précédent

- 135/402

Suivant