Zmienny zakres w zagnieżdżonych funkcjach
Czy ktoś mógłby wyjaśnić, dlaczego następujący program zawodzi:
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()
z wiadomością:
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
Ale jeśli po prostu zmienię zmiennąx
do tablicy, działa:
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()
z wyjściem
10
11
12
13
14
15
16
17
18
19
Powodem, dla którego jestem zdezorientowany, jest skądf()
nie może uzyskać dostępux
, dlaczego staje się dostępny, jeślix
jest tablicą?
Dzięki.