您不能创建一个已知名称并在所有模块中引用同一对象。每个模块都有自己的global
命名空间。
但是您当然可以通过使用限定名来访问其他模块的命名空间。
编辑:
1
使用类似(即在名为 的文件中)或类似的模块名称1.py
不是一个好主意,因为数字不能用作标识符。像这样的限定名称1.obj
是语法错误。所以我将使用这些文件one.py
,two.py
然后我可以one.obj
毫无问题地访问。
如果在文件中one.py
你有类似的东西
obj = "foo"
然后你可以在文件中导入它two.py
:
import one
print one.obj # or use it any way you like
如果你像这样导入它:
from one import obj
然后你仍然会有相同的对象:
print obj == one.obj # will print True (they are equal)
print obj is one.obj # will print True (they are the same)
但在另一个名为 obj 的变量中:
obj = "bar"
print obj, one.obj # will print "bar foo"
这两个变量不相同仅在您将某物分配给它们的情况下才重要。
因此,如果您希望能够更改值(并使更改对所有使用模块生效),您可以在任何one.obj
地方使用限定名称 ( ):
import one
one.obj = "bar"
或者,您可以更改现有值,而不是为变量分配新值。这也将对所有使用模块产生影响:
one.py
:
obj = [ "foo" ]
two.py
:
from one import obj
obj[0] = "bar"
one.py
即使我们obj
是一个不同的变量,这也会产生影响,one.obj
因为两个变量都引用同一个列表。
如果可能的话,我当然会建议使用使用限定名称的版本,因为引用的东西隐藏了机制,并且可能会让下一个开发人员感到惊讶。