documentation for the locals() function特别警告不要修改其输出,因为解释器可能无法反映本地范围的变化。我假设这意味着Python规范不需要它,即使它在CPython中有效。
我想知道globals()是否相同。在the documentation中没有任何警告,但我觉得奇怪的是,这会有所不同,因为每个函数显然在不同的范围内执行相同的操作。
如果它是安全的,修改globals()'输出将改善我正在进行的项目的简单性和兼容性。
答案 0 :(得分:23)
即使在CPython中,修改locals()
也不会可靠地工作。它碰巧在模块和类范围内工作,但它在函数内失败(任何修改“都不会”,因为locals()
在这种情况下提供本地命名空间的副本,而不是对真实的引用的东西)
但是,globals()
是不同的,因为始终指的是模块名称空间,并且模块名称空间需要像普通字典一样运行。所以,是的,globals()
上没有警告不是疏忽,实际上是允许的。