[英]Will python add name in packages namespace with from * import *?
假设我们有一个名为“ package”的包,它有一个模块“ module”。
要是我们
从包导入模块
由于加载了“包”,包的本地名称空间是否将具有名称“模块”?
我们可以在引用“ import”时看到这样的短语:
导入语句的第一种形式将本地名称空间中的模块名称绑定到模块对象,然后继续导入下一个标识符(如果有)。 如果模块名称后跟as,则名称后跟as作为模块的本地名称。
from形式不绑定模块名称:它遍历标识符列表,在步骤(1)中找到的模块中查找每个标识符,然后将本地名称空间中的名称绑定到由此找到的对象。 与第一种导入形式一样,可以通过指定“ as localname”来提供备用的本地名称。 如果找不到名称,则会引发ImportError。 如果标识符列表用星号(*)代替,则模块中定义的所有公共名称都将绑定在import语句的本地名称空间中。
第二段中的“发件人形式不绑定模块名称”是什么意思?
是的, 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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.