nonlocal - python globals
Por qué las funciones anidadas pueden acceder a variables desde funciones externas, pero no pueden modificarlas (2)
Esta pregunta ya tiene una respuesta aquí:
En el segundo caso a continuación, Python intenta buscar una variable local. Cuando no encuentra uno, ¿por qué no puede verse en el ámbito externo como lo hace para el primer caso?
Esto busca x en el ámbito local, luego alcance externo:
def f1():
x = 5
def f2():
print x
Esto le da a local variable ''x'' referenced before assignment
error de local variable ''x'' referenced before assignment
:
def f1():
x = 5
def f2():
x+=1
No puedo modificar la firma de la función f2 (), así que no puedo pasar y devolver valores de x. Sin embargo, sí necesito una forma de modificar x. ¿Hay alguna manera de decirle explícitamente a Python que busque un nombre de variable en el ámbito externo (algo similar a la palabra clave global
)?
Versión de Python: 2.7
En Python 3.x esto es posible:
def f1():
x = 5
def f2():
nonlocal x
x+=1
return f2
El problema y una solución para esto, para Python 2.x también, se dan en this publicación. Además, lea PEP 3104 para obtener más información sobre este tema.
def f1():
x = { ''value'': 5 }
def f2():
x[''value''] += 1
La solución alternativa es usar un objeto mutable y actualizar miembros de ese objeto. El enlace de nombres es complicado en Python, a veces.