我有局部變量的測試巢功能, 我得到了錯誤如下面的代碼:巢功能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