为什么 globals() 是 Python 中的一个函数?

Why is globals() a function in Python?

Python 提供函数 globals() 来访问所有全局变量的字典。为什么这是一个函数而不是一个变量?以下作品:

g = globals()
g["foo"] = "bar"
print foo # Works and outputs "bar"

在函数中隐藏全局变量的基本原理是什么?是只调用一次并在某处存储引用更好,还是我应该在每次需要时都调用它?

恕我直言,这不是 Reason for globals() in Python? 的副本,因为我不是在问为什么 globals() 存在,而是为什么它必须是一个函数(而不是变量 __globals__ ).

因为它可能取决于 Python 实现 构建该字典的工作量。

在 CPython 中,全局变量仅保存在另一个映射中,并调用 globals() 函数 returns 对该映射的引用。但是其他 Python 实现可以根据需要自由地为对象创建单独的字典。

这反映了 locals() 函数,它在 CPython 中必须按需创建字典,因为局部变量通常存储在数组中(局部名称在 C[= 中被转换为数组访问) 23=] 字节码).

因此,当您需要访问全局名称的映射时,您会调用 globals()。存储对该映射的引用在 CPython 中有效,但不要指望其他实现中的其他 this。