Область действия переменных во вложенных функциях
Может ли кто-нибудь объяснить, почему не работает следующая программа:
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()
с сообщением:
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
Но если я просто поменяю переменнуюx
к массиву, это работает:
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()
с выходом
10
11
12
13
14
15
16
17
18
19
Причина, по которой я запутался, еслиf()
он не может получить доступx
почему он становится доступным, еслиx
такое массив?
Благодарю.