python3包(package)和模块(module) – Python3教程

上一章Python教程请查看:python3模块
在本文中,你将学习如何使用Python包将代码库划分为干净、高效的模块,此外,你还将学习在Python程序中导入和使用自己的或第三方的包。
Python的包是什么?我们通常不会把所有的文件都存放在同一个地方,我们使用组织良好的目录层次结构,以便于访问。
相似的文件保存在同一个目录中,例如,我们可以将所有的歌曲保存在“music”目录中,与此类似,Python也有用于目录的包和用于文件的模块。
随着我们的应用程序在大量模块的支持下变得越来越大,我们将类似的模块放在一个包中,而将不同的模块放在不同的包中,这使得项目(程序)易于管理,概念清晰。
类似地,由于目录可以包含子目录和文件,所以Python包可以包含子包和模块。
一个目录必须包含一个名为_init_ .py的文件,以便Python将其视为一个包。这个文件可以保持为空,但是我们通常会将该包的初始化代码放在这个文件中。
这里有一个例子,假设我们正在开发一个游戏,一个可能的包和模块的组织如下图所示。

python3包(package)和模块(module) – Python3教程

文章图片
从包中导入模块我们可以使用点(.)操作符从包中导入模块。
例如,如果希望在上面的示例中导入start模块,可以按照以下步骤进行。
import Game.Level.start

现在,如果这个模块包含一个名为select_difficult()的函数,我们必须使用它的全名来引用它。
Game.Level.start.select_difficulty(2)

如果这个结构看起来很长,我们可以不使用包前缀来导入模块,如下所示。
from Game.Level import start

我们现在可以像下面这样简单地调用这个函数。
start.select_difficulty(2)

【python3包(package)和模块(module) – Python3教程】另一种从包内的模块中导入所需函数(或类或变量)的方法如下。
from Game.Level.start import select_difficulty

现在我们可以直接调用这个函数。
select_difficulty(2)

虽然比较简单,但不推荐使用此方法,使用完整的名称空间可以避免混淆并防止两个相同的标识符名称发生冲突。
在导入包时,Python查找sys.path中定义的目录列表,类似于模块搜索路径。

    推荐阅读