Ámbito variable en funciones anidadas.
Alguien podría explicar por qué el siguiente programa falla:
def g(f):
for _ in range(10):
f()
def main():
x = 10
def f():
print x
x = x + 1
g(f)
if __name__ == '__main__':
main()
con el mensaje:
Traceback (most recent call last):
File "a.py", line 13, in <module>
main()
File "a.py", line 10, in main
g(f)
File "a.py", line 3, in g
f()
File "a.py", line 8, in f
print x
UnboundLocalError: local variable 'x' referenced before assignment
Pero si simplemente cambio la variablex
a una matriz, funciona:
def g(f):
for _ in range(10):
f()
def main():
x = [10]
def f():
print x[0]
x[0] = x[0] + 1
g(f)
if __name__ == '__main__':
main()
con la salida
10
11
12
13
14
15
16
17
18
19
La razón por la que estoy confundido es, si def()
no puede accederx
, por qué se vuelve accesible six
es una matriz?
Gracias.