Python 本地更新不起作用

Gau*_*wal 5 python python-2.7 python-3.x

为什么下面不是在函数内部工作而是在外部工作?

def foo():
    common = {'abc' : 'xyz'}
    print(locals())
    locals().update(common)
    print(locals(),abc)

foo()
Run Code Online (Sandbox Code Playgroud)

错误:NameError:未定义全局名称“abc”

如果我在函数外运行它,它会起作用

common = {'abc' : 'xyz'}
print(locals())
locals().update(common)
print(locals(),abc)
Run Code Online (Sandbox Code Playgroud)

Jul*_*ard 5

根据当地人的文件

注意本词典内容不得修改;更改可能不会影响解释器使用的局部变量和自由变量的值。

所以它不起作用,因为它不打算工作。但是现在要回答你的问题,它在全局范围内工作,因为修改globals是可能的,全局文档没有说明“这个 [...] 不应该被修改”。

而且,显然,当您处于全局范围内时, global 是 locals:

>>> globals() is locals()
True
Run Code Online (Sandbox Code Playgroud)

所以你正在修改全局变量,这是允许的。