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 zugreifenxWarum wird es zugänglich, wennx ist ein Array?

Vielen Dank.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage