在这个文件中,我使用一个全局声明的名为modelDict
的字典,并在多个函数(addCharToModelDict, dumpModelDict
)中使用它。我还没有在这些函数中使用global
关键字来使用全局modelDict
addCharToModelDict
正在更新它,dumpModelDict
最终将它写回文件。
一切都很好!!
为什么会发生这种情况??是否有必要使用全局关键字
只有在重新绑定名称时才需要global
关键字。您的操作会更改对象。
您正在使用globals
中的modelDict
变量(python试图在本地查找modelDict
,但无法找到,然后它试图在globals
中查找并成功)。如果您使用外部代码中定义的变量read或update,则此操作有效。
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