python如何利用自带的缓存机制提高效率
这篇文章将为大家详细讲解有关python如何利用自带的缓存机制提高效率,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
利用自带的缓存机制提高效率
缓存是一种将定量数据加以保存,以备迎合后续获取需求的处理方式,旨在加快数据获取的速度。
数据的生成过程可能需要经过计算,规整,远程获取等操作,如果是同一份数据需要多次使用,每次都重新生成会大大浪费时间。所以,如果将计算或者远程请求等操作获得的数据缓存下来,会加快后续的数据获取需求。
为了实现这个需求,Python 3.2 + 中给我们提供了一个机制,可以很方便的实现,而不需要你去写这样的逻辑代码。
这个机制实现于 functool 模块中的 lru_cache 装饰器。
@functools.lru_cache(maxsize=None,typed=False)
参数解读:
maxsize:最多可以缓存多少个此函数的调用结果,如果为None,则无限制,设置为 2 的幂时,性能最佳
typed:若为 True,则不同参数类型的调用将分别缓存。
举个例子
fromfunctoolsimportlru_cache@lru_cache(None)defadd(x,y):print("calculating:%s+%s"%(x,y))returnx+yprint(add(1,2))print(add(1,2))print(add(2,3))
输出如下,可以看到第二次调用并没有真正的执行函数体,而是直接返回缓存里的结果
calculating:1+233calculating:2+35
下面这个是经典的斐波那契数列,当你指定的 n 较大时,会存在大量的重复计算
deffib(n):ifn<2:returnnreturnfib(n-2)+fib(n-1)
第六点介绍的 timeit,现在可以用它来测试一下到底可以提高多少的效率。
不使用 lru_cache 的情况下,运行时间 31 秒
importtimeitdeffib(n):ifn<2:returnnreturnfib(n-2)+fib(n-1)print(timeit.timeit(lambda:fib(40),number=1))#output:31.2725698948
由于使用了 lru_cache 后,运行速度实在太快了,所以我将 n 值由 30 调到 500,可即使是这样,运行时间也才 0.0004 秒。提高速度非常显著。
importtimeitfromfunctoolsimportlru_cache@lru_cache(None)deffib(n):ifn<2:returnnreturnfib(n-2)+fib(n-1)print(timeit.timeit(lambda:fib(500),number=1))#output:0.0004921059880871326
关于“python如何利用自带的缓存机制提高效率”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
相关文章
- python(中无效的十进制怎么解决 python怎么转换进制)
- python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
- python(编程控制电脑关机 如何控制电脑关机)
- python中的特殊标识符(python 中 标识符中可以有逗号吗)
- python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
- python中字典定义的四种方法(python global关键字的用法详解)
- python(array用法 python如何对两个数组做差处理)
- python多行注释符号怎么表示
- python支持的操作系统是什么
- python如何判断列表为空
本站已关闭游客评论,请登录或者注册后再评论吧~