【发布时间】:2013-05-03 09:46:52
【问题描述】:
谁能解释一下为什么下面的程序会失败:
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 是一个数组,为什么它可以访问?
谢谢。
【问题讨论】:
标签: python scope nested-function