我在 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?
答案 0 :(得分:2)
嗯,我非常确信应该已经有了这个问题的答案,但我似乎无法找到它。那么,你走吧:
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