Python提供函数globals()
来访问所有全局变量的字典。为什么这是一个函数而不是一个变量?以下作品:
g = globals()
g["foo"] = "bar"
print foo # Works and outputs "bar"
在函数中隐藏全局变量背后的基本原理是什么?最好只调用一次并在某处存储引用,或者每次需要时都应该调用它?
恕我直言,这不是Reason for globals() in Python?的重复,因为我不会问为什么globals()
存在,而是为什么它必须是一个函数(而不是变量__globals__
)。
答案 0 :(得分:17)
因为它可能依赖于 Python实现构建该字典需要做多少工作。
在CPython中,全局变量只保留在另一个映射中,调用globals()
函数会返回对该映射的引用。但是其他Python实现可以根据需要随意为对象创建单独的字典。
这反映了locals()
函数,它在CPython中必须按需创建字典,因为本地文件通常存储在一个数组中(本地名称在CPython字节码中被转换为数组访问)。
当您需要访问全局名称的映射时,请调用globals()
。存储对该映射的引用在CPython中有效,但在其他实现中不要指望其他。