Python3 模块
Python3 模块(Modules)
🎯 学习目标
掌握 Python 模块的基本概念、定义方式与使用方法,理解模块在代码组织、复用和项目结构设计中的核心作用。能够在实际开发中合理划分模块、导入标准库或第三方模块,并遵循最佳实践进行模块化编程。
🔑 核心重点
分类 | 内容 |
---|---|
基本概念 | 模块是一个 .py 文件,可被其他程序导入并复用 |
导入方式 | 使用 import module_name 或 from module import name |
搜索路径 | Python 解释器查找模块的路径顺序:当前目录 → PYTHONPATH → 标准库路径 |
实际应用场景 | 代码解耦、功能封装、项目结构清晰化、协作开发 |
性能优化 | 避免重复导入;使用 __all__ 控制公开接口 |
📚 详细讲解
一、什么是模块?
模块是组织 Python 代码的基本单位,每个 .py
文件就是一个模块。模块可以包含函数、类、变量等,便于代码复用和维护。
✅ 示例:
创建文件 math_utils.py
:
# math_utils.py
def add(a, b):
return a + b
def multiply(a, b):
return a * b
另一个文件中导入使用它:
# main.py
import math_utils
result = math_utils.add(3, 5)
print(result) # 输出 8
二、模块导入语法详解
1. 基础导入
import module_name
使用时需加模块名前缀:
module_name.function()
2. 导入特定对象
from module import function, variable, class
使用时不需加前缀:
function()
3. 导入全部内容(慎用)
from module import *
📌 不推荐使用,容易造成命名冲突。
4. 别名导入
import module as m
from module import function as func
三、模块搜索路径
当执行 import module
时,Python 解释器会按照以下顺序查找模块:
- 当前运行脚本所在目录
- 环境变量
PYTHONPATH
中指定的目录 - Python 安装的标准库路径
- 第三方包安装路径(如
site-packages
)
✅ 查看当前模块搜索路径:
import sys
print(sys.path)
四、__init__.py
文件的作用
在 Python 包中,__init__.py
是一个标识该目录为包的关键文件(即使为空)。
✅ 示例目录结构:
my_package/
├── __init__.py
├── module_a.py
└── module_b.py
在外部导入:
import my_package.module_a
你还可以在 __init__.py
中预加载子模块:
# my_package/__init__.py
from .module_a import func_a
from .module_b import func_b
这样就可以直接导入包:
from my_package import func_a
五、模块的重新加载
默认情况下,模块只会在首次导入时执行一次。如果想重新加载已修改的模块,可以使用 importlib.reload()
。
✅ 示例:
import my_module
import importlib
importlib.reload(my_module)
📌 注意:重载不会影响已经从模块中导入的对象。
六、模块属性:__name__
和 __main__
每个模块都有一个内置变量 __name__
,表示模块的名字。当模块作为主程序运行时,其值为 '__main__'
。
✅ 示例:
# hello.py
def say_hello():
print("Hello")
if __name__ == "__main__":
say_hello()
📌 如果作为脚本运行,则输出 Hello
;如果被导入则不执行。
⚠️ 注意事项
- 避免循环导入(A 导入 B,B 又导入 A)
- 模块名应小写,避免与标准库模块同名
- 尽量使用显式导入(
import package.module
)而非隐式 - 模块应职责单一,功能明确
- 使用
__all__
明确导出哪些名称(用于from module import *
)
🧪 实际案例分析
📌 场景:构建一个模块化的天气查询系统
目录结构:
weather_app/
├── __init__.py
├── api.py # 调用天气 API
├── utils.py # 工具函数
├── config.py # 配置信息
└── main.py # 主程序入口
各模块内容示例:
# config.py
API_KEY = "your_api_key_here"
BASE_URL = "https://api.weather.com/data"
# utils.py
def format_temp(temp):
return f"{temp}°C"
# api.py
import requests
from config import BASE_URL, API_KEY
def get_weather(city):
url = f"{BASE_URL}?city={city}&key={API_KEY}"
response = requests.get(url).json()
return response
# main.py
from api import get_weather
from utils import format_temp
city = input("请输入城市名称:")
data = get_weather(city)
print(f"温度:{format_temp(data['temperature'])}")
📌 优势:
- 结构清晰,易于维护
- 功能模块分离,便于测试
- 支持多人协作开发
🧩 拓展练习(动手实践)
- 创建一个名为
string_utils.py
的模块,实现字符串反转、去空格、统计字符等功能。 - 编写一个
calculator.py
模块,提供加减乘除函数,并在main.py
中调用。 - 设计一个包结构,包含多个模块,并通过
__init__.py
导出常用函数。 - 使用
importlib.reload()
观察模块热加载效果。 - 编写一个模块,在其中定义常量、函数和类,并限制
from module import *
时只能导入部分功能。
📚 推荐阅读
- Python 官方文档 - Modules
- 《流畅的 Python》第 16 章 - 模块与包
- 廖雪峰 Python 教程 - 模块
- 菜鸟教程 - Python 模块
- Real Python - Introduction to Python Modules
🧭 下一步建议
- 下一章学习内容:《Python3 包与发布》
- 掌握如何将多个模块组织成包
- 学习使用
setuptools
构建分发包 - 探索上传到 PyPI 并分享你的模块
- 结合依赖管理知识,构建完整可发布的 Python 项目
如果你希望我为你提供:
- Python 模块速查表 PDF(含导入方式+结构图)
- 更多实战项目练习题(如构建自己的工具包、模拟模块热加载等)
- 模块高级技巧详解(如动态导入、相对导入、模块缓存等)
- 视频教学资源推荐(中文讲解)
欢迎随时告诉我 😊