variable nonlocal inside for español def python scope

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.