写递归函数像写诗,优雅但费命。Fibonacci递归版几行代码就能让CPU风扇起飞——同样的计算重复千百遍,Python解释器照单全收。
函数式编程圈有个老梗:纯函数是"老实人",同样输入永远给同样答案。既然答案不变,为什么要问第二遍?
Memoization就是这个思路的落地。缓存第一次计算结果,后续调用直接查表,复杂度从指数级砍到线性。Python标准库functools.lru_cache一行装饰器搞定,官方文档却把它藏在角落多年。
对比测试很直观:递归Fibonacci(35)原本耗时4秒,加缓存后降到0.0001秒。提升不是10倍,是4万倍。
「这是函数式编程最实用的工具之一,Python让它简单到令人尴尬」——原帖作者这样评价。尴尬的是,多数开发者仍在Stack Overflow复制粘贴笨重的手动缓存代码。
lru_cache默认128条缓存,够大多数场景用。需要更多?括号里改个数就行。这个被低估的装饰器,可能是Python标准库里性价比最高的性能优化。
热门跟贴