跳到主要内容

Python 包

提示
  1. Python包的作用:包是代码组织的容器,用于将大型项目的相关代码模块化,便于管理和重用。
  2. 包模型结构:在Python中,包通过包含__init__.py文件的目录来组织,可包含多个模块和子包。
  3. 导入方式多样:可以整体导入包,或仅导入所需的模块或函数,但使用完整命名空间更能防止命名冲突。

包是一个容器,它包含了用于执行特定任务的各种函数。例如,math包包括了sqrt()函数,用于计算数字的平方根。

在处理大型项目时,我们必须处理大量代码,而将所有内容写在同一个文件中会使我们的代码看起来混乱。相反,我们可以通过将相关代码放在包中,将代码分散到多个文件中。

现在,我们可以在项目中需要时使用这些包。这样我们也可以重用我们的代码。

Python编程中的包模型结构

假设我们正在开发一个游戏。包和模块的可能组织结构如下图所示。

包模型结构

注意:为了让Python将目录视为一个包,目录中必须包含一个名为__init__.py的文件。这个文件可以留空,但我们通常会在这个文件中放置该包的初始化代码。

从包中导入模块

在Python中,我们可以使用点(.)运算符从包中导入模块。

例如,如果我们想导入上面示例中的start模块,可以这样做:

import Game.Level.start

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

Game.Level.start.select_difficulty(2)

不使用包前缀导入

如果这种结构看起来过长,我们可以不使用包前缀导入模块,如下所示:

from Game.Level import start

现在我们可以简单地这样调用函数:

start.select_difficulty(2)

仅导入所需功能

另一种从包中的模块导入所需功能(如函数、类或变量)的方法如下:

from Game.Level.start import select_difficulty

现在我们可以直接调用这个函数。

select_difficulty(2)

尽管这种方法更简单,但不推荐使用。使用完整的命名空间可以避免混淆,并防止两个相同的标识符名称发生冲突。

导入包时,Python会查找定义在sys.path中的目录列表,类似于模块搜索路径