修改globals()的输出是否安全?

时间:2011-05-11 03:07:49

标签: python globals

documentation for the locals() function特别警告不要修改其输出,因为解释器可能无法反映本地范围的变化。我假设这意味着Python规范不需要它,即使它在CPython中有效。

我想知道globals()是否相同。在the documentation中没有任何警告,但我觉得奇怪的是,这会有所不同,因为每个函数显然在不同的范围内执行相同的操作。

如果它是安全的,修改globals()'输出将改善我正在进行的项目的简单性和兼容性。

1 个答案:

答案 0 :(得分:23)

即使在CPython中,修改locals() 也不会可靠地工作。它碰巧在模块和类范围内工作,但它在函数内失败(任何修改“都不会”,因为locals()在这种情况下提供本地命名空间的副本,而不是对真实的引用的东西)

但是,globals()是不同的,因为始终指的是模块名称空间,并且模块名称空间需要像普通字典一样运行。所以,是的,globals()上没有警告不是疏忽,实际上是允许的。