Python缓存提高递归代码性能lru_cache
问题描述
斐波那契数列的递推公式如下,在编程中最直接的实现方式是使用递归,如果能将每一步的计算结果缓存下来,那计算效率肯定更高
F(1)=1F(2)=1F(n)=F(n−1)+F(n−2),n≥3\begin{array}{l}F(1)=1\\F(2)=1\\F(n)=F(n-1)+F(n-2),\;n\geq3\end{array}F(1)=1F(2)=1F(n)=F(n−1)+F(n−2),n≥3
解决方案
使用functools
模块中的lru_cache()
,使用最久未使用(LRU)缓存算法
PS:该算法在计算结果相同时有用,如time()
或random()
之类的函数是没有用的
代码
from functools import lru_cache@lru_cache(maxsize=None)
def fib(n):if n < 2:return nreturn fib(n - 1) + fib(n - 2)def fib1(n):if n < 2:return nreturn fib1(n - 1) + fib1(n - 2)result = [fib(i) for i in range(16)]
print(result)
print(fib.cache_info()) # 查看命中和未命中次数
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
# CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
对比
%%timeit
[fib(i) for i in range(16)]
# 2.26 µs ± 27.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
[fib1(i) for i in range(16)]
# 567 µs ± 4.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
计算n=16的斐波那契数列的情况下,快250倍。使用了缓存后,n=1000也能轻松计算出来。
参考文献
- functools — 高阶函数和可调用对象上的操作
- Python的Functools模块简介
- Introduction To Python’s Functools Module
Python缓存提高递归代码性能lru_cache相关推荐
- python linux 优化_Python 代码性能优化技巧
Python 性能优化除了改进算法,选用合适的数据结构之外,还有几种关键的技术,比如将关键 python 代码部分重写成 C 扩展模块,或者选用在性能上更为优化的解释器等,这些在本文中统称为优化工具. ...
- 微信小程序利用缓存提高接口请求性能
对于接口数据过多的接口可以使用缓存提升用户体验和性能,同时也可以防止用户重复请求过多次数 data: {leftMenuList:[],//左侧菜单数据rightContent:[],//右侧的商品数 ...
- python测试代码性能_使用python timeit 模块检测代码性能
使用Python 通常在乎的是它的开发效率,而不是运行性能. 但如果通过很简单的方法可以测试出n种不同的写法之间的性能差异,这个过程本身也是一种乐趣. python 自带了timeit 模块,可以在代 ...
- 如何使用缓存提高程序性能
1 写在前面 此文主要参考了园子里以下两篇文章: 黄聪,Microsoft Enterprise Library 5.0 系列(一) : Caching Application Block (初级) ...
- Python缓存lru_cache的介绍和讲解
一.前言 我们经常谈论的缓存一词,更多的类似于将硬盘中的数据存放到内存中以至于提高读取速度,比如常说的redis,就经常用来做数据的缓存. Python的缓存(lru_cache)是一种装饰在被执行的 ...
- Python 缓存机制之functools.lru_cache
说到缓存这个概念,我想大家应该都不陌生 ,以Redis和Memcache为代表的缓存应用基本成为了现在微服务架构的标配了. 事实上,并不是说要用缓存就必须部署Redis等服务,比如在以Python为开 ...
- java开发之提高java和mysql代码性能和质量
0.if嵌套的层数最好不要超过3层 点击(此处)折叠或打开 import java.util.HashMap; import java.util.Map; public class Qiantao { ...
- python代码性能优化技巧
python代码性能优化技巧 代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Pyth ...
- 提升Python代码性能的六个技巧
文章目录 前言 为什么要写本文? 1.代码性能检测 1.1.使用 timeit 库 1.2.使用 memory_profiler 库 1.3.使用 line_profiler 库 2.使用内置函数和库 ...
最新文章
- linux写命令时方便的快捷键以及Vim必备命令
- 一篇文章带你搞懂JS对象的自我销毁
- 中国人工智能学会通讯——人工智能如何造福人类 1.1 人工智能是中性技术
- DL之Keras:keras保存网络结构、网络拓扑图、网络模型(json、yaml、h5等)注意事项及代码实现
- 转载 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛? (手机游戏)...
- .net core 下使用StackExchange的Redis库访问超时解决
- 如何用java对接口发送请求_7. 用Java做接口测试1-发送HTTP请求和接收HTTP响应
- PyTorch:保存/加载训练好的模型测试
- 中小学计算机教育的重要性,信息技术在小学教育中重要性.doc
- iBeacon的第一篇(基于Swift实现)
- JDBC的使用(msql);
- 2022年CISP考试题库下载
- 提高睡眠质量的东西,每天晚上睡不着的你一定要试试
- html播放韰 寸 频,asp.net 汉字转换拼音及首字母实现代码
- matlab计算最大特征向量,MATLAB求最大特征值和特征向量
- win8/win10任务栏/语言栏跳动/闪烁
- 【bWAPP】XSS通关记录
- PR视频去水印—中间值
- 云计算机可以玩游戏吗,免费云桌面系统能跟云电脑一样玩游戏吗?
- php acs解密,RSA 加密及php实现