1. 使用列表推导式替代循环
# 传统方式
result = []
for i in range(10):
if i % 2 == 0:
result.append(i**2)
# 列表推导式
result = [i**2 for i in range(10) if i % 2 == 0]
✅ 更简洁,且通常执行更快(C语言层面优化)。
2. 善用内置函数和标准库
# 低效
max_value = 0
for num in numbers:
if num > max_value:
max_value = num
# 高效
max_value = max(numbers)
👉 内置函数如 map()、filter()、sum() 等都是用C实现的,速度远超手动循环。
3. 利用生成器处理大数据
# 列表(占用全部内存)
data = [x**2 for x in range(1000000)]
# 生成器(惰性计算,节省内存)
data_gen = (x**2 for x in range(1000000))
🚀 用 () 代替 [] 创建生成器,适合流式数据处理。
4. 使用 join() 拼接字符串
# 低效(每次拼接创建新对象)
result = ""
for s in string_list:
result += s
# 高效
result = "".join(string_list)
📌 字符串不可变,频繁拼接会产生大量临时对象。
5. 局部变量访问更快
def calculate():
# 将频繁访问的全局变量转为局部变量
local_func = some_heavy_function
for i in range(10000):
local_func(i)
⚡ 局部变量存储在栈中,访问速度比全局变量快。
6. 用 in 检查成员存在性
# 低效(列表遍历)
if value in my_list: # O(n)
# 高效(集合/字典)
if value in my_set: # O(1)
🔍 对频繁查找的操作,优先使用 set 或 dict。
7. 使用 collections 模块
from collections import defaultdict, Counter
# 自动初始化字典
dd = defaultdict(list)
dd[key].append(value)
# 快速计数
counts = Counter(iterable)
🎯 这些专门的数据结构经过优化,比手动实现更高效。
8. 避免重复计算,缓存结果
# 使用 lru_cache 自动缓存函数结果
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
💡 适合递归函数或计算成本高的纯函数。
额外建议:使用性能分析工具
- 用
cProfile 找出瓶颈:python -m cProfile your_script.py
- 使用
timeit 测量代码片段:import timeit
timeit.timeit('your_code()', setup='from __main__ import your_code', number=1000)
关键原则
- 先保证正确性,再优化瓶颈(遵循“不要过早优化”)。
- 利用Python生态:对性能要求极高的部分可考虑用
numpy、pandas(向量化计算)或 Cython。
- 注意可读性:简洁≠晦涩,团队协作时需平衡性能与可维护性。
这些技巧能应对大多数常见场景,但实际优化前建议先通过性能分析定位真正瓶颈!