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

Why is globals() a function in Python?

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

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

在函数中隐藏全局的基本原理是什么?如果只调用一次并将引用存储在某个地方,或者每次需要时都应该调用它,这更好吗?

imho,这不是python中globals()的原因的副本吗?因为我不是在问为什么globals()存在,而是为什么它必须是一个函数(而不是变量__globals__)。


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

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

这反映了locals()函数,在cpython中,由于局部变量通常存储在一个数组中(本地名称转换为cpython字节码中的数组访问),因此必须根据需要创建一个字典。

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