Python导入和from x导入。他们之间真正的区别是什么?

2024-10-01 04:45:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我读了另外两个关于它的问题。 this

但我不明白这种行为:

#mod1 __init__.py
g = 5

#mod2 __init__.py
from mod1 import g
def bar():
    print g

#main1.py
import mod1
mod1.g = 10
from mod2 import bar
bar() # prints 10

#main2.py
from mod1 import g
g = 10
from mod2 import bar
bar()

所以问题是为什么main1打印10,main2打印5?进口和进口的真正区别是什么?你知道吗


Tags: frompyimportinitdefbarthisprints
2条回答

关键是在main1()中,您将模块mod1中的变量g设置为10,因此调用bar()返回10。我想这很清楚。 在main2()中,您首先将g设置为10,但是当mod2导入mod1时,它会得到一个带有初始变量集的新范围。尝试在main2()调用mod2后打印g,我猜它会打印更改的值(10)。你知道吗

您必须记住,import只是告诉解释器查找相应模块中调用的内容(就好像您要再次打开脚本一样)。当然,当程序更改变量时,分配给变量的值在脚本中不会更改。解释器只读取一次.py文件(在您的情况下是再次读取),也就是在导入它时。你知道吗

这与范围有关

mod2导入mod1(g=5)

main1将mod1.g设置为10,并要求mod2打印mod1.g的值

main2将main2.g设置为10,但mod1.g不变

相关问题 更多 >