Escopo variável em funções aninhadas
Alguém poderia explicar por que o seguinte programa falha:
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()
com a mensagem:
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
Mas se eu simplesmente mudar a variávelx
para uma 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()
com a saída
10
11
12
13
14
15
16
17
18
19
A razão pela qual estou confuso é, se def()
não pode acessarx
, porque se torna acessível sex
é uma matriz?
Obrigado.