这是一个语言设计问题。为什么设计师没有使用
import A.B
而不是
from A import B
假设A是包含函数B的模块。导入语法的单一样式是不是更好?这背后的设计原理是什么?我认为Java样式导入语法感觉更自然。
答案 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
通常会像那样导入