Variabler Bereich in verschachtelten Funktionen
Könnte jemand erklären, warum das folgende Programm fehlschlägt:
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()
mit der Nachricht:
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
Aber wenn ich einfach die Variable änderex
zu einem Array funktioniert es:
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()
mit der Ausgabe
10
11
12
13
14
15
16
17
18
19
Der Grund, warum ich verwirrt bin, ist, wenn ausf()
es kann nicht zugreifenx
Warum wird es zugänglich, wennx
ist ein Array?
Vielen Dank.