Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不在Python中导入A.B?_Python - Fatal编程技术网

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

为什么不在Python中导入A.B?,python,Python,这是一个语言设计问题。为什么设计师没有使用 import A.B 而不是 from A import B 假设A是一个包含函数B的模块。导入语法使用单一样式不是更好吗?这背后的设计原则是什么?我认为Java风格的导入语法感觉更自然。您可以使用模块来实现这一点,但不能使用函数,例如 os.path通常是这样导入的一致性import A.B从不将B添加到本地名称空间,即使在该名称空间有效的情况下也是如此;它只是通过A使B可用,而这些函数已经很自然了。Python导入语句主要用于加载模块和包。您必

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

import A.B
而不是

from A import B

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

您可以使用模块来实现这一点,但不能使用函数,例如


os.path
通常是这样导入的

一致性
import A.B
从不将
B
添加到本地名称空间,即使在该名称空间有效的情况下也是如此;它只是通过
A
使
B
可用,而这些函数已经很自然了。

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

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

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


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

如果
B
是一个函数,则不能
导入A.B
,它必须是一个模块。是。我在问为什么要这样设计。你可以这样导入你可能认为Java语法更自然,因为你更习惯Java@没有人说你不能。他问为什么有两个。那么为什么我在导入multiprocessing.pool.ThreadPool时出错?
os.path
是一个模块。比如说,
sys.stdin
os.path
是一种特殊情况,在这种情况下不应作为示例使用。假设a和B是模块,C是具有以下层次结构的函数:a.B.C,并假设我只导入a。为什么我不能访问a.B.C?子模块不会自动导入。您需要导入
A.B
才能访问
A.B.C
。我们不需要用Java加载模块,也不需要用Python加载模块吗?换句话说,Java和Python模块之间有什么区别?@MohammadMoghimi,请参阅我的最后一段。