我在 module1 中声明了一个函数:
from shared import *
def foo():
global a
print('in :',a)
a=0
print('out:',a)
和共享模块:
a=1
所以我启动了 python3 解释器并且:
>>> from module1 import *
>>> a
1
>>> foo()
in : 1
out: 0
>>> a
1
为什么 a
仍然是 1?
最佳答案
Hrm,我非常确信这个问题应该已经有了答案,但我似乎无法找到它。那么,开始吧:
from shared import *
将所有(导出的)字段从 shared
模块导入到当前命名空间。它通过迭代模块中的字段并将变量分配到与模块中同名的当前命名空间来实现。
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> from shared import *
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a']
请注意,我们当前的命名空间现在包含一个名为 a
的变量。
虽然 a
与 shared.a
具有相同的值(在导入时),但两者之间没有进一步的联系。如果您在命名空间中重新分配 a
,这对导入的模块没有影响。
事实上,如果您再次从模块中提取名称,您将覆盖您的本地值:
>>> a = 5
>>> a
5
>>> from shared import a
>>> a
1
关于python - 无法更改导入模块中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640013/