python – 导入模块时的奇怪行为

我有
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!

最佳答案 我只有一个解释:

> from package.m1 import x加载模块包和package.m1. m1被添加到包模块中,但包不会添加到您的全局变量中.
> import package.m2现在将包模块添加到您的全局变量中.由于m1已经是软件包的一部分,因此现在可以通过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'>
点赞