假设我们有一个名为' package'的软件包,它有一个模块'模块'。
如果我们
来自包导入模块的
因为' package'已加载,包的本地名称空间将有一个名称'模块'?
我们可以在参考' import'
中看到这样的词组第一种形式的import语句绑定本地的模块名称 命名空间到模块对象,然后继续导入下一个 标识符,如果有的话。如果模块名称后跟as,则为名称 以下用作模块的本地名称。
from表单不绑定模块名称:它遍历列表 标识符,在步骤中找到的模块中查找每个标识符 (1),并将本地名称空间中的名称绑定到对象 找到。与第一种导入形式一样,备用本地名称也可以 通过指定“as localname”来提供。如果找不到名字, 引发了ImportError。如果标识符列表被替换为 star(' *'),模块中定义的所有公共名称都绑定在 import语句的本地命名空间..
它是什么意思" from表单不绑定模块名称"在第二段?
答案 0 :(得分:1)
是的,package.__init__
模块可以访问名称module
:
$ mkdir package
$ touch package/__init__.py
$ touch package/module.py
$ python
Python 2.7.5 (default, Oct 28 2013, 20:45:48)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from package import module
>>> import sys
>>> sys.modules['package']
<module 'package' from 'package/__init__.py'>
>>> dir(sys.modules['package'])
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'module']
>>> sys.modules['package'].module
<module 'package.module' from 'package/module.py'>
您引用的第二段讨论了from foo import bar
import语句绑定的名称。 bar
受约束,foo
不受约束。或者,就上述演示而言:
>>> module
<module 'package.module' from 'package/module.pyc'>
>>> package
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'package' is not defined
from package import module
语句为命名空间添加了module
名称,但package
未绑定。