我有局部变量的测试巢功能, 我得到了错误如下面的代码:巢功能Python的本地名称
# coding: utf-8
def func3():
x = [1, 2, 3]
def func2():
print 'func2:', locals()
x[0] += x[0]
print 'func2:', locals()
def func3():
print 'func3:', locals()
x = x[0]
print 'func3:', locals()
func2()
print "-->", locals()
func3()
print "==>", locals()
if __name__ == '__main__':
func3()
我得到了错误:
func2: {'x': [1, 2, 3]}
func2: {'x': [2, 2, 3]}
--> {'func3': <function func3 at 0x1076adde8>, 'func2': <function func2 at 0x1076ad6e0>, 'x': [2, 2, 3]}
func3: {}
Traceback (most recent call last):
File "test.py", line 23, in <module>
func3()
File "test.py", line 19, in func3
func3()
File "test.py", line 13, in func3
x = x[0]
UnboundLocalError: local variable 'x' referenced before assignment
为什么func2
和func3
有不同的答案吗?
'x'不是全局的,它来自外部范围。 'func2'是正确的,没有任何额外的'global'或'nonlocal'声明。 – interjay
@interjay我已经编辑了我的答案,但你来得太早了27秒。看看我对'global''和'nonlocal'的回归的其他答案的评论。 – zondo
答案仍然错误。 'func2'不会访问外部变量。 – interjay