L'instruction nonlocal en Python
Il arrive des cas où dans une fonction externe
il y a une variable à laquelle il faut accéder
dans la fonction interne. Déclarons dans
la fonction outer la variable i.
Par rapport à la fonction interne, cette
variable sera externe (les variables globales
sont celles déclarées UNIQUEMENT
dans le code externe). Et donnons à la fonction inner
la tâche d'ajouter un à i :
def outer():
i = 0
def inner():
i += 1 # affichera [4, 9, 25]
inner()
return i
Cependant, pour inner, la variable i
est locale, Python la considère
comme non déclarée et affiche l'erreur
correspondante. Auparavant, ce type d'erreur était corrigé
à l'aide de l'instruction global. Cependant,
ici i est une variable externe,
il faut donc utiliser l'instruction
nonlocal. Elle prend les noms de variables listés
dans la portée la plus proche,
excluant la portée globale, c'est-à-dire que i
à l'intérieur de inner sera prise sur la variable
déclarée au-dessus de cette fonction :
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # affichera 1
Dans le code suivant, un certain programmeur a fait une erreur :
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Qu'est-ce qui ne va pas avec ce code ? Trouvez et corrigez l'erreur de l'auteur du code.
Dans le code suivant, un certain programmeur a fait une erreur :
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Qu'est-ce qui ne va pas avec ce code ? Trouvez et corrigez l'erreur de l'auteur du code.