📅  最后修改于: 2020-09-19 14:54:31             🧑  作者: Mango
通常,我们通常不会将所有文件存储在同一位置的计算机上。我们使用井井有条的目录层次结构,以便于访问。
相似的文件保存在同一目录中,例如,我们可以将所有歌曲保留在“ music “目录中。与此类似, 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
定义的目录列表,类似于模块搜索路径。