我有一个简单的Python模块文件First.py
:
a = 50
b = [100,200,300]
我尝试将此模块导入另一个文件Test.py
:
import First
First.a = 420
First.b[0] = 420
print (First.a)
我的目的是更改First模块中的列表值。
当我在模块中打印值时脚本Test.py
完成后,我发现值没有改变。
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (I
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import First
>>> dir(First)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__spec__', 'a', 'b']
>>> First.a
50
>>> First.b
[100, 200, 300]
我在这里缺少什么?有人可以指导我吗?
答案 0 :(得分:1)
当我在模块中打印值时脚本
Test.py
完成后,我发现值没有改变。
如果您执行了python Test.py
,然后以交互方式启动了解释器并检查了值,当然,修改将不可见。 Python只会在找到First.py
时加载import
,执行它并使用a
中的值初始化b
和First.py
;以前的执行不会影响这一点。
如果您在交互式口译员中导入Test
并,那么导入First
的更改将会反映出来:
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul 2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import Test
420
>>> import First
>>> First.a
420
>>> First.b
[420, 200, 300]
在导入Test
期间,First
已加载并执行,然后修改了其值。当您重新导入python时,只需查看导入模块的表(sys.modules
)并返回它而不执行其内容(并重新初始化a
和b
)