为什么"import"与"import*"存在差异?

Vij*_*pte 6 python import

"""module a.py"""
test = "I am test"
_test = "I am _test"
__test = "I am __test"
Run Code Online (Sandbox Code Playgroud)

=============

~ $ python
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39) 
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from a import *
>>> test
'I am test'
>>> _test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '_test' is not defined
>>> __test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__test' is not defined
>>> import a
>>> a.test
'I am test'
>>> a._test
'I am _test'
>>> a.__test
'I am __test'
>>> 
Run Code Online (Sandbox Code Playgroud)

mon*_*kut 21

带有前导"_"(下划线)的变量不是公共名称,使用时不会导入from x import *.

在这里,_test__test没有公开姓名.

import语句描述:

如果标识符列表被星号('*')替换,则模块中定义的所有公共名称都绑定在import语句的本地名称空间中.

模块定义的公共名称是通过检查模块命名空间中名为__all__的变量来确定的.如果已定义,则它必须是一个字符串序列,这些字符串是由该模块定义或导入的名称.__all__中给出的名称都被视为公共名称,并且必须存在.如果未定义__all__,则公共名称集包括在模块命名空间中找到的所有名称,这些名称不以下划线字符('_')开头.__all__应包含整个公共API.它旨在避免意外导出不属于API的项目(例如在模块中导入和使用的库模块).