2

我对python有基本的了解,但是我在某处读到过,当我们使用以下语法导入模块时,它不会导入以_(单下划线)开头的指定模块中定义的属性。谁能告诉我它是怎么发生的以及为什么会这样?

from module.submodule import *
4

1 回答 1

6

这是设计使然。以下划线开头的变量被视为仅供内部使用(与其他语言中的私有不同)。它们仍然可以直接在模块上访问,但它们不会在导入时*导入。

从有关导入的文档中:*

这将导入所有名称,但以下划线 (_) 开头的名称除外。在大多数情况下,Python 程序员不使用这个工具,因为它在解释器中引入了一组未知的名称,可能隐藏了一些你已经定义的东西。

这也是告诉你不鼓励使用 * 导入,最好明确导入你需要的东西。例外是被设计为通过 * import 使用的模块,这意味着它们有一个__all__属性(一个包含模块想要导出的所有内容的名称的列表)。

于 2013-07-17T10:29:37.947 回答