Python 性能优化实战:让代码快起来的五个实用技巧
Python 以简洁易读著称,但也常被贴上“慢”的标签。其实很多性能问题并非语言本身的瓶颈,而是写法不当造成的。本文结合日常开发中的真实场景,分享五个立竿见影的优化技巧。
一、优先使用列表推导式
循环加 append 是最常见的写法,但列表推导式由 C 层循环实现,通常比等价循环快 30% 以上:
squares = [x * x for x in range(10000)]
如果还需要过滤条件,直接写在推导式里即可,避免多一层循环。
二、用生成器处理大数据
列表会一次性把全部数据装进内存,而生成器一次只产生一个值,内存占用几乎恒定:
def read_lines(path):
with open(path) as f:
for line in f:
yield line.strip()
求和时也可以直接用生成器表达式:sum(x * x for x in range(10 ** 7)),既省内存又简洁。
三、善用内置函数与标准库
内置函数大多由 C 实现,比手写 Python 循环快得多。sum()、map()、max()、any()、all(),以及 collections.Counter、itertools,都是值得优先使用的工具:
from collections import Counter
Counter(words).most_common(5)
四、用 functools.lru_cache 缓存重复计算
对于存在大量重复调用的纯函数,加一层缓存往往能带来数量级的提升:
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
return n if n < 2 else fib(n - 1) + fib(n - 2)
需要注意,缓存只适用于参数可哈希、无副作用的纯函数。
五、选对数据结构
成员判断用 set 而不是 list:set 的 in 操作是 O(1),list 是 O(n);需要键值映射用 dict;既要去重又要保序,可以用 dict.fromkeys()。数据结构选对了,很多“优化”根本不需要做。
结语
性能优化的第一步永远是先测量再优化:用 timeit 对比小段代码,用 cProfile 定位真正的热点,再针对性地改写。记住:先写对,再写快;过早优化是万恶之源。
- 点赞
- 收藏
- 关注作者
评论(0)