Menu Close

Python 包 (Package) 子包以及python包的初始化

1. 什么是包?

通常,我们通常不会将所有文件存储在同一位置的计算机上。 我们使用井井有条的目录层次结构,以便于访问。

相似的文件保存在同一目录中,例如,我们可以将所有歌曲保留在“音乐”目录中。 与此类似,Python 具有用于目录的软件包和用于文件的模块。

随着我们的应用中包含许多模块的程序变得越来越大,我们将相似的模块放在一个程序包中,而将不同的模块放在不同的程序包中。 这使项目(程序)易于管理且概念清晰。

同样,由于目录可以包含子目录和文件,因此 Python 程序包可以具有子程序包和模块。

目录必须包含一个名为__init__.py的文件,Python 才能将其视为一个包。 该文件可以保留为空,但是我们通常将该程序包的初始化代码放在此文件中。

这是一个例子。 假设我们正在开发一个游戏。 软件包和模块的一种可能组织如下图所示。

Package Module Structure in Python Programming

2. 从包中导入模块

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

例如,如果在上面的示例中要导入start模块,则可以按以下步骤完成:

import Game.Level.start

现在,如果此模块包含名为select_difficulty()的函数,则必须使用全名来引用它。

Game.Level.start.select_difficulty(2)

如果这个构造看起来很冗长,我们可以如下导入不带包前缀的模块:

from Game.Level import start

当您使用该语句从包中导入所有对象时:

from <package> import *

现在,我们可以简单地调用该函数,如下所示:

start.select_difficulty(2)

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

from Game.Level.start import select_difficulty

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

select_difficulty(2)

尽管比较容易,但不建议使用此方法。 使用完整的名称空间可以避免混淆,并防止两个相同的标识符名称冲突。

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

3. 初始化一个python包

按照惯例,当您导入一个包时,Python 将执行该包中的 __init__.py。

因此,您可以将代码放在 __init__.py 文件中以初始化包级数据。

4. python子包

包可以包含子包。子包允许您进一步组织模块。

下面显示了包含三个子包的销售包:订单、交货和开票。每个子包都有对应的模块。

例如,您可以将所有其他与订单处理相关的模块放在订单子包中:

你学到的关于包的一切也可应用于子包。

例如,要从 order 子包中导入函数,请使用以下 import 语句:

# main.py
from sales.order import create_sales_order

create_sales_order()

摘要

  • 一个 Python 包包含一个或多个模块。 Python 使用文件夹和文件结构来管理包和模块。
  • 如果要初始化包级数据,请使用 __init__.py 文件。
  • 使用 __all__ 变量指定导入包时将自动加载的模块。
  • 一个包可能包含子包。

 

READ  Python 命名空间和范围 (作用域)
除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in Python教程

Related Posts