当前位置: 首页 > news >正文

Python 入门手札:从 0 到会--第九天Python的模块化编程--模块、包以及常见系统模块和第三方模块总结

目录

一、模块

1. 模块化编程(Modular Programming)

2. 什么是模块(Module)

3.模块的分类

3.1 内置模块(标准库模块)

3.1.1. 与操作系统交互

3.1.2. 文件与数据处理

3.1.3. 正则表达式与文本处理

3.1.4. 数学与随机数

3.1.5. 时间与日期

3.1.6. 数据结构与算法

3.1.7. 网络与服务

3.1.8. 异常与调试

3.2 第三方模块

3.2.1. 科学计算与数据分析

3.2.2. 机器学习与人工智能

3.2.3. 网络请求与解析

3.2.4. Web 开发框架

3.2.5. 数据库连接与 ORM

3.2.6. 自动化与办公

3.2.7. 虚拟环境与依赖管理

3.3 自定义模块

3.4 模块的导入方式

3.5 模块搜索路径

二、包

1. 什么是包

2. 包的特点

3. 包的目录结构示例

4. init.py 的作用

5. 子包的概念

6. 命名建议

7. 总结

三、模块和包的对比

1. 基本概念对比

2. 使用场景对比

四、导入

1. 导入模块的常用方式

2.模块搜索路径(sys.path)

3. 绝对导入与相对导入

4. 动态导入模块

5. 常见问题说明

6. 总结


一、模块

1. 模块化编程(Modular Programming)

模块化编程是一种将程序划分为多个功能独立、可重复使用模块的编程方式。

优点:

  • 高复用性:模块可以在多个程序中重复使用。

  • 高可维护性:模块之间低耦合,易于修改和调试。

  • 高可读性:结构清晰,逻辑分明。

  • 便于协作开发:可多人分别开发不同模块。


2. 什么是模块(Module)

模块是一个 Python 文件(.py),内部包含:

  • 变量

  • 函数

  • 可执行代码等

例如:

# mymodule.py
def greet(name):return f"Hello, {name}"

3.模块的分类

3.1 内置模块(标准库模块)

Python 内置模块,安装 Python 时自动提供,无需单独安装,直接 import 即可使用。

3.1.1. 与操作系统交互
模块名说明
os与操作系统交互,如文件/目录操作
sys与 Python 解释器交互,如路径、参数等
shutil高级文件操作(复制、移动等)
subprocess执行子进程和外部命令

os 模块示例: 

#os 模块(与操作系统交互)
import os
​
# 获取当前工作目录
print("当前目录:", os.getcwd())
​
# 创建文件夹(如果不存在)
folder_name = "demo_folder"
if not os.path.exists(folder_name):os.mkdir(folder_name)

sys 模块示例: 

#sys 模块(访问解释器参数)
import sys
​
# 获取命令行参数(启动时传入)
print("命令行参数:", sys.argv)
​
# 获取 Python 版本
print("Python 版本:", sys.version)
3.1.2. 文件与数据处理
模块名说明
json处理 JSON 数据
csv读写 CSV 文件
pickle对 Python 对象进行序列化/反序列化
io处理文件流和内存流

json模块示例: 

#json 模块(处理 JSON 数据)
import json
​
data = {"name": "Alice", "age": 25}
json_str = json.dumps(data)  # 转换为 JSON 字符串
print("JSON 字符串:", json_str)
​
# 解析 JSON 字符串为 Python 字典
parsed = json.loads(json_str)
print("解析后:", parsed["name"])
3.1.3. 正则表达式与文本处理
模块名说明
re正则表达式处理
string字符串常量和工具函数
textwrap文本换行和缩进处理

re 模块示例: 

#re 模块(正则表达式)
import re
​
text = "邮箱是 test123@example.com"
pattern = r"\w+@\w+\.\w+"
​
match = re.search(pattern, text)
if match:print("找到邮箱:", match.group())
3.1.4. 数学与随机数
模块名说明
math提供数学函数,如三角函数、对数等
random生成随机数
decimal精确小数计算
fractions分数运算

math 模块示例: 

#math 模块(数学运算)
import math
​
print("平方根:", math.sqrt(16))
print("向上取整:", math.ceil(3.2))
print("圆周率:", math.pi)
#random 模块(生成随机数)
import random
​
print("随机整数(1~10):", random.randint(1, 10))
print("随机选择:", random.choice(['apple', 'banana', 'cherry']))
3.1.5. 时间与日期
模块名说明
time时间戳、睡眠等
datetime日期时间处理
calendar日历相关处理

datetime 模块示例: 

#datetime 模块(处理日期时间)
from datetime import datetime, timedelta
​
now = datetime.now()
print("当前时间:", now)
​
# 往前推 3 天
three_days_ago = now - timedelta(days=3)
print("三天前:", three_days_ago.strftime("%Y-%m-%d"))
3.1.6. 数据结构与算法
模块名说明
collections提供额外的数据结构,如dequeCounter
heapq堆队列(优先队列)
bisect二分查找与插入
itertools迭代器工具,如排列、组合等
functools函数工具,如缓存、偏函数等
3.1.7. 网络与服务
模块名说明
socket低层网络通信
http.server简单 HTTP 服务器
urllibHTTP 请求处理
uuid生成唯一标识符
3.1.8. 异常与调试
模块名说明
logging日志系统
traceback错误追踪栈
warnings发出警告
assert(语法)条件断言
3.2 第三方模块

以下模块大多数通过 pip install 模块名 安装,适用于 Web 开发、数据处理、机器学习等领域。

3.2.1. 科学计算与数据分析
模块名说明
numpy数组与矩阵运算的核心库
pandas数据清洗与分析
scipy科学与工程计算
matplotlib绘图与可视化
seaborn高级统计图表库(基于 matplotlib)

 pandas 模块示例:

#pandas 模块(数据分析)
#需先安装:pip install pandas
import pandas as pd
​
# 创建 DataFrame
data = {'name': ['Alice', 'Bob'], 'age': [25, 30]}
df = pd.DataFrame(data)
​
print("查看表格:")
print(df)
​
# 计算平均年龄
print("平均年龄:", df['age'].mean())

 matplotlib 模块示例:

#matplotlib 模块(绘图)
#需先安装:pip install matplotlib
import matplotlib.pyplot as plt
​
x = [1, 2, 3, 4]
y = [2, 4, 6, 8]
​
plt.plot(x, y)
plt.title("简单折线图")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.show()
3.2.2. 机器学习与人工智能
模块名说明
scikit-learn通用机器学习库
tensorflowGoogle 提供的深度学习框架
torch(PyTorch)Facebook 提供的深度学习框架
xgboost常用于比赛的梯度提升算法
3.2.3. 网络请求与解析
模块名说明
requests简单易用的 HTTP 客户端
httpx异步 HTTP 客户端
beautifulsoup4HTML/XML 解析库
lxml高性能 HTML/XML 解析库
selenium自动化浏览器操作

requests 模块示例: 

#requests 模块(第三方模块,用于网络请求)
#需先安装:pip install requests
import requests
​
response = requests.get("https://api.github.com")
print("响应状态码:", response.status_code)
print("返回内容:", response.json())
3.2.4. Web 开发框架
模块名说明
flask轻量级 Web 框架
django全功能 Web 框架
fastapi异步、类型注解友好的新兴 Web 框架
3.2.5. 数据库连接与 ORM
模块名说明
sqlalchemy通用 ORM 工具
pymysqlMySQL 数据库驱动
psycopg2PostgreSQL 数据库驱动
3.2.6. 自动化与办公
模块名说明
openpyxl操作 Excel 文件(.xlsx)
xlrd / xlwt读写旧版 Excel(.xls)文件
python-docx处理 Word 文件
pdfplumber提取 PDF 文本内容
pyautogui模拟鼠标键盘操作(自动化测试)
3.2.7. 虚拟环境与依赖管理
模块名说明
virtualenv / venv创建虚拟环境
pipenv管理虚拟环境和依赖
poetry项目依赖与构建工具
3.3 自定义模块

自己创建的 .py 文件,用于组织代码,提高复用性。

创建模块 tools.py

def add(a, b):return a + b

使用模块:

import tools
print(tools.add(3, 5))  # 输出 8

跨文件夹使用

假设目录结构如下:

project/utils/__init__.pymath_utils.pymain.py

main.py中:

from utils.math_utils import add
​
print(add(3, 5))  # 输出: 8

3.4 模块的导入方式
import math                   # 导入整个模块
from math import sqrt         # 导入模块中的某个函数
import numpy as np            # 给模块起别名
from math import *            # 导入所有内容(不推荐)

3.5 模块搜索路径

模块加载时,Python 按以下顺序查找模块:

  1. 当前目录

  2. 环境变量 PYTHONPATH 指定的目录

  3. 标准库目录

  4. 第三方库目录(如 site-packages)

查看路径:

import sys
print(sys.path)

二、包

1. 什么是包

包是组织 Python 模块的一种形式。它本质上是一个文件夹,用于管理多个相关模块。包中必须包含一个名为 __init__.py 的文件,这个文件可以为空,也可以包含包的初始化代码。

2. 包的特点

  1. 包是一个目录。

  2. 包中必须有 __init__.py 文件。

  3. 包中可以包含模块文件(.py)或子包。

  4. 使用包可以构建结构清晰的大型项目。

3. 包的目录结构示例

my_project/
├── main.py
└── my_package/├── __init__.py├── module1.py└── module2.py

说明:

  • my_package 是一个包

  • module1.pymodule2.py 是其中的模块

  • __init__.py 标识该目录为包

4. init.py 的作用

  1. 标识包目录: 告诉Python解释器当前目录应被视为一个包。

  2. 执行初始化代码: 可以包含任何代码,通常用于包的初始化操作,如变量初始化、导入模块等。这些代码在包被导入时执行。

  3. 控制包的导入行为: 通过 __all__ 变量明确指定从包中可以导入哪些模块,从而限制包的公开接口。

  4. 提供包级别的命名空间: __init__.py 中定义的变量和函数可以在包的模块中共享。

  5. 批量导入模块: 可以在 __init__.py 文件中批量导入模块,这些模块可以更方便地使用。

示例:

# __init__.py 文件示例
​
# 1. 批量导入系统模块
import os
import sys
import datetime
​
# 2. 定义包级别的变量
package_variable = "This is a package variable"
​
# 3. 控制包的导入行为
__all__ = ['module1', 'module2']
​
# 4. 执行初始化代码
print("Initializing mypackage")
​
# 注意:这个代码会在包被导入时执行
​
# 5. 导入包内的模块
from . import module1
from . import module2

5. 子包的概念

包中还可以包含子包。例如:

my_package/
├── __init__.py
├── module1.py
└── sub_package/├── __init__.py└── sub_module.py

6. 命名建议

  • 包名应使用小写字母,符合 Python 命名规范

  • 避免使用与标准库同名的包名,如 math、random、os 等

7. 总结

  • 包是一组相关模块的集合,用于模块的组织管理

  • 需要 __init__.py 文件才能被 Python 识别为包

  • 包中可以嵌套子包形成多层结构

  • 包让项目结构更清晰,利于维护和扩展

三、模块和包的对比

1. 基本概念对比

对比项模块(Module)包(Package)
定义一个 .py 文件,包含变量、函数、类等一个包含 __init__.py 的目录,可包含模块或子包
本质单个文件文件夹
作用封装逻辑,组织代码组织多个模块或子包,构建大型项目结构
文件要求任意 .py 文件即可必须包含 __init__.py 文件
命名一般用小写字母命名一般用小写字母命名,避免与标准库同名
是否可嵌套否(模块不可包含其他模块)是(包可包含子包和模块)
示例math.pyos.pynumpypandas

2. 使用场景对比

场景适用对象举例说明
组织单个功能文件模块string_utils.py 封装字符串处理函数
拆分多个相关模块utils/ 目录下包含 file_ops.pymath_ops.py
搭建大型项目结构my_app/ 项目中含有多个子包与模块
重用代码模块和包皆可将模块或包导入多个项目中使用

四、导入

1. 导入模块的常用方式

1.1导入整个模块

import math
print(math.sqrt(16))

1.2从模块中导入指定内容

from math import sqrt
print(sqrt(25))

1.3给模块或函数起别名

import numpy as np
from math import sqrt as square_root

1.4同时导入多个成员

xxxxxxxxxx from math import sin, cos, tan

1.5通配符导入(不推荐)

from math import *

2.模块搜索路径(sys.path)

Python 在导入模块时会从以下路径中依次查找:

  1. 当前脚本所在目录

  2. 环境变量 PYTHONPATH 指定的目录

  3. 标准库路径

  4. 安装的第三方库路径(如 site-packages)

可以使用如下代码查看搜索路径:

import sys
print(sys.path)

3. 绝对导入与相对导入

3.1绝对导入:从项目根目录开始导入模块

from my_package.module1 import func

3.2相对导入:用于包内部模块之间的调用

from . import module1           # 当前目录
from ..subpackage import mod2   # 上一级目录

说明:

  • 相对导入不能在顶层运行的脚本中使用,只能用于包内部模块互相调用

4. 动态导入模块

有时模块名是字符串,可以使用 importlib 动态导入模块:

import importlib
mod = importlib.import_module("my_package.module1")
mod.func()

5. 常见问题说明

  1. 导入失败:通常是路径不对、模块名拼错或不在搜索路径中

  2. 命名冲突:不要用标准模块名作为自定义模块名,例如:math.py、random.py

  3. 相对导入失败:不能在主程序中使用,只适用于包内部

  4. 推荐使用绝对导入,清晰明了,利于维护

6. 总结

  • Python 提供灵活的模块导入方式

  • 推荐使用绝对导入进行跨模块调用

  • 相对导入用于包内部模块互相引用

  • 导入过程依赖 sys.path 中的路径列表

  • 避免命名冲突、保持结构清晰是良好的导入习惯

http://www.dtcms.com/a/286959.html

相关文章:

  • 微店平台商品详情接口技术实现指南
  • C语言:预处理
  • 软件测试全谱系深度解析:从单元到生产的质量保障体系
  • JavaScript笔记
  • 功能安全之BIST的基本原理
  • 关于tftp怎么把res文件夹传输给开发板的操作步骤:
  • 通过代码识别大小端模式
  • 先让 AI 学会害怕,再让它握紧方向盘
  • Unity 多人游戏框架学习系列六
  • YT Config Tool 添加FreeRTOS模块
  • 【linux V0.11】kernel(水)
  • 2025年6月GESP(C++二级): 幂和数
  • 游戏盾能否保护业务免受DDoS攻击吗?
  • Django母婴商城项目实践(五)- 数据模型的搭建
  • 【Python练习】 049. 编写一个函数,实现简单的文本编辑器功能,支持增删改查
  • 你的品牌需要一个AI首席内容官——解构BrandCraft如何解决内容创作的终极痛点
  • 枚举算法入门
  • 【2025/07/18】GitHub 今日热门项目
  • 北斗网格位置码详解:经纬度到二维网格码的转换(非极地)
  • 针对BERT模型的理解
  • 04-三思而后行:解锁AI的“内心戏”
  • VMware安装Win10教程(附安装包)虚拟机下载详细安装图文教程
  • chainlink VRF中文教程(含mock),解决error: Arithmetic Underflow in createSubscription
  • bmp图像操作:bmp图像保存及raw与bmp转换
  • 二分答案之第 K 小/大
  • CMake指令:常见内置命令行工具( CMake -E )
  • 乙烯丙烯酸酯橡胶市场报告:性能优势、行业现状与发展前景​
  • selenium后续!!
  • 【数据集】1970-2023年全球温室气体排放 GHG 数据集 EDGAR
  • 语音直播和视频直播的测试要点