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

在 Python 中,避免重复计算是提升程序性能的重要手段。尤其在处理大量数据或复杂运算时,合理缓存结果、延迟计算或使用高效结构能显著减少执行时间。
对于纯函数(输入相同则输出不变),functools.lru_cache 是最简单有效的优化方式。它会自动缓存函数调用结果,避免重复计算。
示例:递归计算斐波那契数列时,不加缓存会导致指数级重复调用。
from functools import lru_cache <p>@lru_cache(maxsize=None) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2)
加上 @lru_cache 后,每个参数只计算一次,性能从指数级提升到线性。
立即学习“Python免费学习笔记(深入)”;
在循环中避免重复执行相同的表达式或方法调用。
常见问题:在 for 循环中反复调用 len() 或属性访问。
# 不推荐
for i in range(len(data)):
process(data[i])
<h1>推荐:提前获取长度</h1><p>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)
<h1>按需取值,不会重复计算整个列表</h1><p>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)
<h1>推荐</h1><p>settings = user.get('profile', {}).get('settings', {})
if settings.get('theme') == 'dark' and settings.get('notifications'):
handle(user)
这样不仅避免重复查找,也增强代码可读性和安全性。
基本上就这些。关键是在写代码时多留意“这个值会不会被反复算”,能缓存就缓存,能提前算就别拖到循环里。性能优化不总是需要换语言或框架,很多时候改几行就能见效。
以上就是Python 避免重复计算提高性能的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号