22

locals() 函数的文档特别警告不要修改其输出,因为解释器可能不会反映本地范围内的更改。我假设这意味着 Python 规范不需要它,即使它在 CPython 中工作。

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

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

4

1 回答 1

27

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

但是,globals()它是不同的,因为它总是引用模块命名空间,并且模块命名空间需要像普通字典一样表现。所以是的,没有警告globals()不是疏忽,它确实是允许的。

于 2011-05-11T03:44:47.053 回答