为什么不使用全局关键字就不会出错



在这个文件中,我使用一个全局声明的名为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

相关内容

  • 没有找到相关文章