当前位置: 首页 > 后端技术 > Python

计算太慢?试试lru_cache装饰器

时间:2023-03-26 13:10:12 Python

众所周知,python语言相当好用,但是它的执行性能相对于其他语言来说是比较慢的。幸运的是,python提供了一个非常好的装饰器来解决这个问题,它就是lru_cache装饰器。lru_cache是??通过著名的LCU算法实现的,即最长时间未使用的缓存淘汰算法。[阅读全文]为了形成鲜明的对比,函数的递归过程采用普通方式实现,即不添加任何装饰器。deffunc(n):'''递归示例函数,未添加lru_cache装饰器:paramn::return:'''ifn<=1:returnnreturnfunc(n-1)+func(n-2)Next,再次使用lru_cache装饰器实现。首先,导入所需的装饰器模块。fromfunctoolsimportlru_cache的过程比较简单,至此准备工作就完成了。然后,直接在代码块中引用即可。@lru_cachedeffunc(n):'''递归样本函数,添加lru_cache装饰器:paramn::return:'''ifn<=1:returnnreturnfunc(n-1)+func(n-2)As如上代码所示,只需要在函数定义的部分加上装饰器就大功告成了。最后只需要写一个main函数,分别调用这两个函数,就会有明显的效果。importtime'''测试消耗时间'''if__name__=='__main__':start_time=time.time()result=func(10)end_time=time.time()cost_time=end_time-start_timeprint('resultis'+str(result),'cost_timeis'+str(cost_time))通过上面@lru_cache的使用示例,可??以清楚的发现cost_time为0.0,时间消耗基本可以忽略不计。但是没有使用这个装饰器,计算了半天也没有出来,效果很明显。@lru_cache装饰器大致用于将每次递归计算的数据结果记录为哈希缓存记录。当再次需要结果时,直接从缓存数据中取出结果,避免重复计算的性能消耗。其底层实现还涉及到双向链表、哈希表等实现过程。对于更深层次的LCU算法原理,可以学习一些数据结构+算法的常识。【往期推荐】冒泡排序与选择排序的对比与代码实现!如何通过pynput和logging实现对键盘鼠标行为的监控?如果你是java程序员,如何调用写好的python脚本其实很简单!如何使用PyQt5一步步实现用户登录GUI界面,登录后跳转?办公自动化:几行代码将PDF文档转WORD文档(代码实战)!