使用 lru_cache 缓存函数结果可显著提升性能,如斐波那契递归从指数级优化到线性时间;循环中应避免重复调用 len() 或属性访问,推荐提前存储长度或直接迭代元素;处理大数据时使用生成器按需计算,节省内存与时间;复杂条件中重复的子表达式应提取为局部变量,提升效率与可读性。

在 Python 中,避免重复计算是提升程序性能的重要手段。尤其在处理大量数据或复杂运算时,合理缓存结果、延迟计算或使用高效结构能显著减少执行时间。
使用 lru_cache 缓存函数结果
对于纯函数(输入相同则输出不变),functools.lru_cache 是最简单有效的优化方式。它会自动缓存函数调用结果,避免重复计算。
示例:
递归计算斐波那契数列时,不加缓存会导致指数级重复调用。
from functools import lru_cache@lru_cache(maxsize=None)def fib(n):if n < 2:return nreturn fib(n-1) + fib(n-2)
加上 @lru_cache 后,每个参数只计算一次,性能从指数级提升到线性。
立即学习“Python免费学习笔记(深入)”;
提前计算并复用中间结果
在循环中避免重复执行相同的表达式或方法调用。
常见问题:在 for 循环中反复调用 len() 或属性访问。
# 不推荐for i in range(len(data)): process(data[i])推荐:提前获取长度
n = len(data)for i in range(n):process(data[i])
如果 data 是列表,len(data) 虽然很快,但在大循环中仍可节省开销。更优方式是直接迭代元素:
for item in data: process(item)
使用生成器避免重复构建数据
当处理大批量数据时,重复创建列表会浪费内存和时间。使用生成器按需计算,避免一次性加载所有结果。
def slow_calc_generator(items): for item in items: yield expensive_operation(item)按需取值,不会重复计算整个列表
results = slow_calc_generator(data)first_result = next(results)
配合 itertools 使用可进一步提高效率,如 itertools.cache(Python 3.12+)可记忆生成器结果供多次遍历。
利用变量存储重复表达式
复杂条件判断或链式调用中,相同子表达式应提取为局部变量。
# 不推荐if user.get('profile').get('settings').get('theme') == 'dark': if user.get('profile').get('settings').get('notifications'): handle(user)推荐
settings = user.get('profile', {}).get('settings', {})if settings.get('theme') == 'dark' and settings.get('notifications'):handle(user)
这样不仅避免重复查找,也增强代码可读性和安全性。
基本上就这些。关键是在写代码时多留意“这个值会不会被反复算”,能缓存就缓存,能提前算就别拖到循环里。性能优化不总是需要换语言或框架,很多时候改几行就能见效。
以上就是Python 避免重复计算提高性能的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1372892.html
微信扫一扫
支付宝扫一扫