5Learning Python(第5版)

模块与包

代码组织

模块创建包结构__init__.py导入机制相对导入

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第5章:模块与包(Modules and Packages)

一、导读

1.1 本章学习目标

第5章讲解 Python 的模块和包系统。模块是代码组织的基本单位,包是模块的集合。

1.2 为什么第五章如此重要

模块和包是大型 Python 项目的基础。理解它们才能组织好代码结构。

1.3 核心问题引导

模块如何创建和导入?

包的结构是什么?

相对导入和绝对导入有什么区别?

__init__.py 的作用是什么?


二、核心概念详解

5.1 模块

python
# 创建模块:my_module.py
def greet(name):
    return f"Hello, {name}!"

PI = 3.14159

# 导入模块
import my_module
print(my_module.greet("Alice"))
print(my_module.PI)

# 导入特定内容
from my_module import greet, PI

# 别名
import my_module as mm
from my_module import greet as g

5.2 包

my_package/
├── __init__.py
├── module1.py
├── module2.py
└── subpackage/
    ├── __init__.py
    └── module3.py
python
# 导入包中的模块
from my_package import module1
from my_package.subpackage import module3

# 使用 __init__.py 简化导入
# my_package/__init__.py
from .module1 import func1
from .module2 import func2

# 现在可以
from my_package import func1, func2

5.3 导入机制

python
# 绝对导入(推荐)
from my_package.module1 import func

# 相对导入
from .module1 import func       # 同级
from ..module2 import func      # 上级
from .subpackage.module3 import func  # 子包

# sys.path 和导入顺序
import sys
sys.path.insert(0, "/custom/path")
import my_module

三、实战案例

5.1 项目结构

my_project/
├── setup.py
├── README.md
├── src/
│   └── my_package/
│       ├── __init__.py
│       ├── core/
│       │   ├── __init__.py
│       │   ├── engine.py
│       │   └── utils.py
│       ├── api/
│       │   ├── __init__.py
│       │   └── routes.py
│       └── config.py
└── tests/
    ├── __init__.py
    └── test_core.py

四、本章小结

模块是代码组织的基本单位,包是模块的集合。使用绝对导入,合理使用 __init__.py 简化导入。


五、思考与练习

模块和包有什么区别?

相对导入和绝对导入如何选择?

__init__.py 的作用是什么?

如何组织大型项目的代码结构?

如何处理循环导入?


5/8模块与包
0%