我正在使用Python 2.7.12和numpy 1.12.0並觀察以下行爲。這是預期的嗎?我假定「一個」是在範圍w.r.t在這兩種情況下「F2」如何被訪問「一個」比訪問不同[IND,:]?奇怪的Python/numpy UnboundLocalError行爲
import numpy as np
def f1():
a = np.zeros((1, 10))
def f2():
print locals()
v = [0] * 10
v[3] = 1
a += v
f2()
def f11():
a = np.zeros((1, 10))
def f2():
print locals()
v = [0] * 10
v[3] = 1
a[0,:] = v
f2()
結果::
>>> f11()
{'a': array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])}
>>> f1()
{}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in f1
File "<stdin>", line 7, in f2
UnboundLocalError: local variable 'a' referenced before assignment
>>>
你是*閱讀*和*分配給*'a'的'a + ='。這使得'a * a * local *變量,但直到它被分配後才能讀取它。在'f11()'中,你正在分配一個* slice *,這意味着'a'本身沒有被綁定,並且將它作爲閉包。 –
@MartijnPieters那麼如何使用索引訪問工作? – vin
使用索引進行訪問不會改變'a'指向的內容。它會要求'a'改變索引指向的內容,''''本身*相同,對數組對象的引用。 –