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

Rol*_*ers 14 python global

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

g = globals()
g["foo"] = "bar"
print foo # Works and outputs "bar"
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ers 17

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

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

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

所以globals()当你需要访问全局名称的映射时,你会打电话.存储对该映射的引用在CPython中有效,但在其他实现中不要指望其他.

  • @RolfSievers:文档不保证,不. (3认同)
  • @ user2357112:我不这么认为,但我认为保持全局内部实现免于假设是很重要的. (2认同)