4

我有一个叫做“包”的 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!

4

2 回答 2

2

我对此只有一种解释:

  1. from package.m1 import x加载模块packagepackage.m1. m1已添加到package模块package中,但未添加到您的全局变量中。
  2. 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'>
于 2013-01-30T16:57:52.760 回答
0

语法导入整个from x import y模块,然后引用当前命名空间中的指定对象。可以翻译为:

import x
y = x.y

所以,你实际上是在导入 package.m1

于 2013-01-30T16:23:22.237 回答