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

时间:2015-06-20 21:08:26

标签: python global

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

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

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

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

1 个答案:

答案 0 :(得分:17)

因为它可能依赖于 Python实现构建该字典需要做多少工作。

在CPython中,全局变量只保留在另一个映射中,调用globals()函数会返回对该映射的引用。但是其他Python实现可以根据需要随意为对象创建单独的字典。

这反映了locals()函数,它在CPython中必须按需创建字典,因为本地文件通常存储在一个数组中(本地名称在CPython字节码中被转换为数组访问)。

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