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)
根据当地人的文件:
注意本词典内容不得修改;更改可能不会影响解释器使用的局部变量和自由变量的值。
所以它不起作用,因为它不打算工作。但是现在要回答你的问题,它在全局范围内工作,因为修改globals是可能的,全局文档没有说明“这个 [...] 不应该被修改”。
而且,显然,当您处于全局范围内时, global 是 locals:
>>> globals() is locals()
True
Run Code Online (Sandbox Code Playgroud)
所以你正在修改全局变量,这是允许的。