我有一个叫做“package”的Python包。在其中我有空__init__.py
和两个模块。一个叫m1.py
,只包含一行:
x = 3
另一个名为m2.py
并包含以下行:
x = 5
现在我尝试使用那些模块。首先,我做了类似的事情:
from package.m1 import x
print package.m1.x
当然它不起作用 - 我得到这样的错误:
NameError: name 'package' is not defined
我明白为什么它不起作用。但后来我做了类似的事情:
from package.m1 import x
import package.m2
print package.m1.x
现在它确实有效。为什么?怎么样?我没有导入package.m1!
答案 0 :(得分:2)
我只有一个解释:
from package.m1 import x
加载模块package
和package.m1
。 m1
模块中添加了package
,但未将package
添加到您的全局变量中。import package.m2
现在将package
模块添加到您的全局变量中。由于m1
已经是package
的一部分,现在可以通过package.m1
访问。进一步测试:
>>> from package import m1
>>> package.m1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'package' is not defined
>>> import package.m2
>>> package.m1
<module 'package.m1' from 'package/m1.py'>
>>> from package import m3
>>> package.m3
<module 'package.m3' from 'package/m3.py'>
测试继续:
>>> import package.m1
>>> del package
>>> import package
>>> package.m1
<module 'package.m1' from 'package/m1.py'>
答案 1 :(得分:0)
from x import y
语法导入整个模块,然后引用当前命名空间中的指定对象。它可以翻译为:
import x
y = x.y
所以,你实际上是在导入package.m1