为什么不在Python中导入A.B?

时间:2013-07-06 05:28:58

标签: python

这是一个语言设计问题。为什么设计师没有使用

import A.B

而不是

from A import B

假设A是包含函数B的模块。导入语法的单一样式是不是更好?这背后的设计原理是什么?我认为Java样式导入语法感觉更自然。

3 个答案:

答案 0 :(得分:5)

Python import语句主要用于加载模块和包。您必须先导入模块才能使用它。第二种导入形式仅仅是一个附加功能,加载模块,然后将其某些部分复制到本地命名空间。

存在Java import语句,用于为在其他模块中加载的名称创建快捷方式。 Java import语句不会加载任何内容,只是将内容移动到本地名称空间中。在Java中,您无需导入模块即可使用它们。 import语句与是否加载模块无关。

因此这两种语言采用了完全不同的导入方法。 import语句基本上没有做同样的事情。 Python的导入用于加载,Java导入用于快捷方式。

Java的方法在python中会有些问题。在Java中,很容易从语法中对类/模块/包进行排序。 Python没有那个优势。结果,编译器和读者将难以确定什么是和不是对外部包的引用。出于这个原因,Python的设计者选择使其显式化并强制您指定要加载的外部模块。

答案 1 :(得分:4)

一致性。 import A.B 从不B添加到本地命名空间,即使对于有效的情况也是如此;它只是通过B提供A,其功能已经很自然了。

答案 2 :(得分:1)

您可以使用模块执行此操作,但不能使用函数,例如

os.path通常会像那样导入