我知道在 Python 中可以跨模块共享全局变量。然而,我想知道这在多大程度上是可能的以及为什么。例如,
全局mod.py
x = None
mid_access_mod.py
from global_mod import *
class delta:
def __init__(self):
print x
bot_modif_mod.py
import mid_access_mod
import global_mod
class mew:
def __init__(self):
global_mod.x = 5
def main():
m = mew()
d = mid_access_mod.delta()
即使所有模块都共享全局变量 x,这也会打印 None。为什么会这样呢?看起来 x 在 mid_access_mod.py 中被评估,然后由 mew() 在 bot_modif_mod.py 中分配。
发生这种情况是因为您使用的是不可变值(整数和 None),并且导入变量就像按值传递事物,而不是按引用传递事物。
如果您将 global_mod.x 设为一个列表,并操作其第一个元素,它将按您的预期工作。
当你这样做时from global_mod import x
,您正在创建一个名称x
在你的模块中具有相同的值x
has in global_mod
。对于函数和类之类的东西,这正如您所期望的那样,因为人们(通常)以后不会重新分配这些名称。
正如亚历克斯指出的,如果你使用import global_mod
, 进而global_mod.x
,你就会避免这个问题。您在模块中定义的名称将是global_mod
,它始终引用您想要的模块,然后使用属性访问来获取x
将为您提供最新的值x
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)