无法从导入的模块更改变量

时间:2017-06-19 21:10:02

标签: python python-3.x

我在 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?

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的变量。

虽然ashared.a具有相同的值(导入时),但两者之间没有进一步的联系。如果在命名空间中重新分配a,则这对导入的模块没有影响。

实际上,如果再次从模块中提取名称,则会覆盖本地值:

>>> a = 5
>>> a
5
>>> from shared import a
>>> a
1