"""module a.py"""
test = "I am test"
_test = "I am _test"
__test = "I am __test"
=============
~ $ 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'
>>>
答案 0 :(得分:21)
带有前导“_”(下划线)的变量不是公共名称,并且在使用from x import *
时不会导入。
此处,_test
和__test
不是公开名称。
来自import声明说明:
如果替换了标识符列表 一个明星('*'),所有公共名称 在模块中定义的绑定 导入的本地命名空间 声明..
模块定义的公共名称 通过检查确定 模块的变量名称空间 名为__all__;如果定义,它必须是 一系列名称的字符串 由该模块定义或导入。 __all__中给出的名称都是 被视为公开并被要求 存在。 如果未定义__all__,则为 公共名称集包括所有名称 在模块的命名空间中找到了哪个 不要以下划线开头 字符('_')。 __all__应该 包含整个公共API。它是 意图避免意外 导出不属于的项目 API(例如库模块) 是进口和使用的 模块)。