La declaración nonlocal en Python
Hay casos en los que en una función externa
hay una variable a la que se necesita acceder
desde la función interna. Declaremos en
la función outer la variable i.
En relación a la función interna, esta
variable será externa (las variables globales
son solo las declaradas en el código externo).
Y a la función inner
asignémosle la suma de i más uno:
def outer():
i = 0
def inner():
i += 1 # dará error
inner()
return i
Sin embargo, para inner la variable i
es local, Python la considera
no declarada y muestra el error correspondiente.
Antes, este tipo de error se solucionaba
usando la declaración global. Sin embargo,
aquí i es una variable externa,
por lo tanto se debe usar la declaración
nonlocal. Esta toma los nombres de variables listados
en el ámbito de visibilidad más cercano,
excluyendo el global, es decir, i
dentro de inner se tomará de la variable
declarada arriba de esta función:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # mostrará 1
En el siguiente código, algún programador cometió un error:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
¿Qué está mal con este código? Encuentre y corrija el error del autor del código.
En el siguiente código, algún programador cometió un error:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
¿Qué está mal con este código? Encuentre y corrija el error del autor del código.