在this file我使用的字典命名爲modelDict
全局聲明,我在多個函數中使用它(addCharToModelDict, dumpModelDict
)。我沒有使用這些函數中的global
關鍵字來使用全局modelDict
。
addCharToModelDict
正在更新它,dumpModelDict
最後寫回文件。爲什麼沒有使用全局關鍵字沒有錯誤
一切工作正常!
爲什麼會這樣?是不是使用全局關鍵字是必要的?
在this file我使用的字典命名爲modelDict
全局聲明,我在多個函數中使用它(addCharToModelDict, dumpModelDict
)。我沒有使用這些函數中的global
關鍵字來使用全局modelDict
。
addCharToModelDict
正在更新它,dumpModelDict
最後寫回文件。爲什麼沒有使用全局關鍵字沒有錯誤
一切工作正常!
爲什麼會這樣?是不是使用全局關鍵字是必要的?
該global
關鍵字只有當重新綁定的名稱。您的操作改爲而不是對象。
您與modelDict
變量從globals
工作(蟒蛇試圖找到當地人modelDict
但不能然後它試圖找到它在globals
和成功)。這適用於如果您使用外部代碼中定義的變量讀取或更新。
d = {}
def foo():
a = d.get('x')
d[4] = True
foo()
如果你會嘗試與該名稱(重新綁定),你會得到錯誤重新分配新的數據變量。
>>> d = {}
>>> def foo():
a = d.get('x')
d = {4: True}
>>> foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'd' referenced before assignment
的可能重複[在Python,爲什麼一個功能修改一些參數調用者感知,而不是其他人?](http://stackoverflow.com/questions/575196/in-python-why-可以-A-功能 - 修改 - 一些論點-作爲感知由這即打電話人) – delnan