47、包

小白量化 2025-12-11 08:36:33 38 举报

1、包
1.1 含义
在Python中,为了解决模块名重复的问题,引入了包(Package)的概念。简单理解为一个文件夹、一个目录!
包是一个分层次的目录结构,用于将一组功能相近的模块组织在一起,这样不仅有助于规范代码结构,还能有效避免模块名之间的冲突。
简单来说,包就是一个特殊的"文件夹",用于组织和管理相关的模块。

1.2 导包

创建包的目的不是为了直接运行,而是为了被导入并使用。实际上,包可以被视为模块的一种特殊形式,它的本质在于组织和封装多个模块,以便更方便地进行模块化管理和使用。

(1)import 包名.模块名:导入包内的模块

# 示例
import xiaobai.test
# 使用功能:包名.模块.功能
print(xiaobai.test.name)

(2)from 包名 import 模块名:从包中导入指定的模块

# 示例1
from xiaobai import tes
# 使用功能:模块.功能
print(test.name)
# 示例2
from xiaobai import *    # 导入包内所有模块
print(test.name)          # NameError: name 'test' is not defined

注意:如果__init__.py文件中没有定义__all__的变量或显式的导入包内的任何模块或子包,那么执行from 包名 import *时,它只会导入__init__.py文件中直接定义的内容,而不会导入包内的其他模块或子包。

3.3 __all__变量
是一个列表,用于模块和包中控制 from ... import * 的导入行为。
在模块中定义 __all__ 列表时,使用 from 模块名 import * 将仅导入该列表中指定的元素(如函数、类、变量等)。
同样地,当在包下的 __init__.py 文件中定义 __all__ 列表时,
执行 from 包名 import * 将仅导入该列表中明确指定的模块(如果列表中包含模块名)或 __init__.py 文件中直接定义的其他名称(如函数、类等)。

# 示例
from xiaobai import *    # 导入包内所有模块
print(test.name)  # 可以正常运行了!

注意:在Python中,每当包被导入时,__init__.py文件会自动执行,作为包初始化的一个环节。
但是,为了保持包的清晰和高效,建议在__init__.py文件中避免编写过多或过于复杂的代码。
应尽可能保持其内容简洁,主要用于设置包的基本属性、导入必要的模块或子包,以及执行一些轻量级的操作。

量化小白,从0开始学量化! 1

著作权归文章作者所有。 未经作者允许禁止转载!

最新回复 ( 0 )
发新帖
0