我正在完善我的原始问题(因此我编辑了帖子):
我们假设我们有一个名为“ PackageA”的软件包。在该程序包中,我们有一个名为“ SubPackageA”的子程序包。在该子包中,我们有一个名为“ ModuleA”的模块,该模块包含一个名为“ functionA”的函数。
我知道要调用此函数,我必须执行以下导入:
import PackageA.SubPackageA.ModuleA
然后,我可以通过编写以下内容来调用该函数:
PackageA.SubPackageA.ModuleA.functionA()
我也知道我可以做到:
from PackageA.SubPackageA.ModuleA import functionA
然后我可以通过以下方式调用该函数:
ModuleA.functionA()
我不清楚的是:可以通过编写以下内容导入包和/或子包:
import PackageA
import PackageA.SubPackageA
但是这样做有什么好处?毕竟,要能够调用“ functionA”,我必须专门导入模块,因此导入完整的程序包和/或可以得到什么?完整的子软件包?
谢谢, 塔尔。
答案 0 :(得分:0)
我正在尝试通过进一步的研究来回答自己的问题。让我们忽略该子软件包以使其变得更容易。
让我们假设我有“ PackageA”,并且在此软件包中,我有一个名为“ ModuleA”的模块,其中包含一个名为“ functionA”的功能。
我可以在我的主文件中编写“ import PackageA.ModuleA”,而不是在PackageA dunder初始化文件中编写:“从PackageA import ModuleA”,然后在我的主文件中编写:导入PackageA”,仍然可以调用该函数(通过编写PackageA.ModuleA.functionA()”。
如果您的包中有一个模块,这没有任何意义,但是使用包的整个想法是将彼此相关的多个模块组合在一起,以及从包的dunder中导入所有模块初始化文件,然后在您的代码(主文件)中,您可以从所有模块访问所有功能,只需导入包即可,而不必分别导入每个模块。
我是对的吗?