为什么 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。
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。