大家好,我是正在实战各种 AI 项目的程序员晚枫。
性能优化的黄金法则:先测量,再优化。没有测量的优化,是在猜谜。
《流畅的Python(第2版)》专门讲了一章性能,本讲带你从「测量」到「优化」,建立完整的 Python 性能优化工作流。
🔍 第一步:测量——找到真正的瓶颈
timeit:精准测量小段代码
1 | import timeit |
cProfile:函数级性能分析
1 | import cProfile |
line_profiler:行级性能分析
1 | pip install line_profiler |
1 | # 在需要分析的函数上加 @profile 装饰器 |
memory_profiler:内存使用分析
1 | pip install memory_profiler |
1 | from memory_profiler import profile |
⚡ 第二步:优化——针对瓶颈用对工具
1. 数据结构选择
1 | import time |
2. 字符串操作优化
1 | import time |
3. slots 节省内存
1 | import sys |
4. 生成器 vs 列表:内存敏感场景
1 | import sys |
5. 局部变量缓存:减少属性查找
1 | import time |
🔥 第三步:极限优化——突破 Python 速度
NumPy 向量化:数值计算加速 10-100x
1 | import numpy as np |
functools.lru_cache:缓存计算结果
1 | import functools |
懒加载与缓存属性
1 | import functools |
📈 性能优化工作流总结
1 | 1. 明确优化目标(速度?内存?) |
⚠️ 常见误区
1. 过早优化
1 | # ❌ 不要先写"优化版",再测试是否有必要 |
2. 局部优化忽视全局
1 | # 花了大量时间把某个函数从 0.1s 优化到 0.01s |
3. 忽视 I/O 通常才是真正的瓶颈
1 | # 99% 的"慢"程序,瓶颈在 IO,不在 CPU |
🎯 本讲总结
测量工具:
timeit:精确测量小段代码cProfile:函数级热点分析(先用这个)line_profiler:行级精确分析(确认热点后)memory_profiler:内存使用分析
常用优化技巧(按收益排序):
- 选对数据结构:deque / Counter / defaultdict
- NumPy 向量化:数值计算快 10-100x
- lru_cache / cached_property:消除重复计算
- 生成器:大数据集的内存优化
- slots:大量实例时节省 30-50% 内存
- 字符串 join:代替 += 拼接
- 局部变量缓存:减少属性查找
工作流:先测量 → 找瓶颈 → 针对性优化 → 再测量验证
📚 推荐教材
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
学习路线: 零基础 → 《从入门到实践》 → 《流畅的 Python》 → 本门课程 → 《CPython 设计与实现》
🎓 加入《流畅的 Python》直播共读营
学到这里,如果你想系统吃透这本书——欢迎加入我的直播共读课。
- 每周直播精讲,逐章拆解核心知识点
- 专属学习群,随时答疑交流
- 试运营特惠:
499 元→ 299 元
👉 【立即报名《流畅的 Python》共读课】:https://mp.weixin.qq.com/s/ivHJwn1nNx5ug4TFrapvGg
🔗 课程导航
💬 联系我
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
