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

发布于 2024-11-06 04:29:13 字数 399 浏览 2 评论 0原文

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

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

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

The documentation for the locals() function specifically warns not to modify its output, as interpreters may not reflect changes in the local scope. I'm assuming that means the Python spec doesn't require it, even though it works in CPython.

I'd like to know if this is the same for globals(). There's no warning in the documentation, but I find it strange that this would differ as each function apparently performs the same action on a different scope.

If it's safe, modifying globals()' output would improve the simplicity and compatibility of a project I'm working on.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

动次打次papapa 2024-11-13 04:29:13

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

但是,globals() 是不同的,因为总是引用模块名称空间,并且模块名称空间需要像普通字典一样运行。所以,是的,缺少对 globals() 的警告并不是疏忽,这确实是允许的。

Modifying locals() doesn't work reliably, even in CPython. It happens to work in module and class scopes, but it fails inside a function (any modifications "won't take", since locals() provides a copy of the local namespace in that case, rather than a reference to the real thing)

However, globals() is different, since that always refers to the module namespace, and module namespaces are required to behave like ordinary dictionaries. So yes, the lack of a warning on globals() isn't an oversight, it really is allowed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文