python - 无法更改导入模块中的变量

标签 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?

最佳答案

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

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

事实上,如果您再次从模块中提取名称,您将覆盖您的本地值:

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

关于python - 无法更改导入模块中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640013/

相关文章:

Python 切片 - 除了括号中的内容以外的所有内容

python - 如何将分割的图像与重叠合并

python - 检查两个数字是否可以相同的算法

python - 在 Python 3 中有效地初始化大小为 n*m 的二维数组?

python-3.x - Python 3.7 - 下载图像 - Urllib.request.urlretrieve 错误

python 的 scipy.stats.ranksums 与 R 的 wilcox.test

python - 我如何从包含正则表达式的 python 调用 shell 命令?

python - 为自定义数据类型实现 sum()

Python 3.如何运行外部程序并执行命令?

python - 如何在Python环境中测试目标代码。输入首选测试用例