2013-06-26 53 views
1

this file我使用的字典命名爲modelDict全局聲明,我在多個函數中使用它(addCharToModelDict, dumpModelDict)。我沒有使用這些函數中的global關鍵字來使用全局modelDict
addCharToModelDict正在更新它,dumpModelDict最後寫回文件。爲什麼沒有使用全局關鍵字沒有錯誤

一切工作正常!

爲什麼會這樣?是不是使用全局關鍵字是必要的?

+1

的可能重複[在Python,爲什麼一個功能修改一些參數調用者感知,而不是其他人?](http://stackoverflow.com/questions/575196/in-python-why-可以-A-功能 - 修改 - 一些論點-作爲感知由這即打電話人) – delnan

回答

7

global關鍵字只有當重新綁定的名稱。您的操作改爲而不是對象。

2

您與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 
相關問題