Python教程21:包(Package)

Python教程21:包(Package) “治大国如烹小鲜,理大项目如分包装。” 上一课我们学习了模块,今天更进一步,学习包(Package)——模块的集合。当项目规模变大时,包能帮你更好地组织代码。 1. 什么是包 定义 **包(Package)**是一个包含__init__.py文件的目录,用于组织相关的模块。 为什么需要包: 层次化组织:大项目有上百个模块,需要分类 命名空间:不同包可以有同名模块 代码复用:打包分发给他人使用 团队协作:不同团队负责不同包 简单示例 项目结构: myproject/ ├── main.py └── utils/ # 这是一个包 ├── __init__.py # 必需!标识这是一个包 ├── string_utils.py └── math_utils.py init.py的作用: 告诉Python这个目录是一个包 可以为空文件 也可以包含包的初始化代码 Python 3.3+可以省略(但不推荐) 使用包: 1# main.py 2from utils import string_utils 3from utils import math_utils 4 5# 或者 6import utils.string_utils 7import utils.math_utils 2. 创建第一个包 步骤 创建目录结构: mymath/ ├── __init__.py ├── basic.py └── advanced.py 编写模块代码: 1# mymath/basic.py 2"""基础数学运算""" 3 4def add(a, b): 5 """加法""" 6 return a + b 7 8def subtract(a, b): 9 """减法""" 10 return a - b 1# mymath/advanced.py 2"""高级数学运算""" 3 4def power(base, exp): 5 """幂运算""" 6 return base ** exp 7 8def sqrt(x): 9 """平方根(简单实现)""" 10 return x ** 0.5 配置__init__.py: 1# mymath/__init__.py 2""" 3mymath包:提供数学运算功能 4 5这个文件在包被导入时执行,可以用来: 61. 初始化包级别的变量 72. 导入子模块,简化使用 83. 定义__all__,控制from package import *的行为 9""" 10 11# 包级别的变量 12VERSION = "1.0.0" 13 14# 简化导入:用户可以直接from mymath import add 15from .basic import add, subtract 16from .advanced import power, sqrt 17 18# 定义公开接口 19__all__ = ['add', 'subtract', 'power', 'sqrt', 'VERSION'] 20 21# 包初始化代码 22print(f"mymath包已加载,版本:{VERSION}") 使用包: 1# 方式1:直接从包导入(因为__init__.py中重新导出了) 2from mymath import add, power 3print(add(1, 2)) # 3 4print(power(2, 3)) # 8 5 6# 方式2:从子模块导入 7from mymath.basic import add 8from mymath.advanced import power 9 10# 方式3:导入整个包 11import mymath 12print(mymath.add(1, 2)) 13print(mymath.VERSION) 3. 子包和嵌套结构 包可以包含子包,形成层次结构: ...

2024-09-20 · 4 min · 671 words · 老墨