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?Por qué las funciones anidadas pueden acceder a variables desde funciones externas, pero no pueden modificarlas
Esto se ve por x en el ámbito local, el alcance continuación externa:
def f1():
x = 5
def f2():
print x
Esto da local variable 'x' referenced before assignment
error:
def f1():
x = 5
def f2():
x+=1
no estoy autorizado a modificar la firma de la función f2() por lo No puedo pasar y devolver valores de x. Sin embargo, sí necesito una forma de modificar x. ¿Hay alguna forma 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 Python: 2,7
python 3 proporciona 'nonlocal' para este propósito, pero creo que vale la pena preguntar por qué necesita hacer esto. Esto es un poco más seguro que usar 'global', pero todavía no se siente bien. – mgilson
@mgilson hay muchas buenas razones para hacerlo, ver p. la sección de razonamiento en pep-3104. – thebjorn
¿Qué versión de python usas? – soulcheck