Python学习笔记--内置模块functools中的lru_cache()函数

在编写一些应用中,我们的一些函数常常需要做一些耗时较长的操作,比如调用第三方API,进行复杂的运算等。尤其是处理数据的一些应用,需要重复计算,或者从外部获取数据,可以使用内置模块functools中的lru_cache()函数把计算的数据缓存下来,在后面重复计算使用数据时,就不再计算而是从缓存中获取前面计算过的数据,从而提升效率。

lru_cache()是一个装饰器,它可以用于将一个函数的结果缓存起来,以便在将来的调用中重复使用这些结果,从而提高性能。它使用最近最少使用(LRU)策略来管理缓存的大小。

使用场景:

  1. 重复计算:当某个函数的结果需要重复计算时,可以使用lru_cache()来缓存结果。这样,在后续的调用中,可以直接从缓存中获取结果,而不需要重新计算。
  2. 缓存数据:当某个函数需要从外部资源(如数据库、网络等)获取数据时,可以使用lru_cache()来缓存这些数据。这样,在后续的调用中,可以直接从缓存中获取数据,而不需要重新从外部资源获取。
  3. 优化性能:对于一些计算密集型或IO密集型的函数,使用lru_cache()可以显著提高性能。因为重复计算和外部资源访问通常是耗时的操作,使用缓存可以避免不必要的计算和访问。
python 复制代码
from functools import lru_cache  
  
@lru_cache(maxsize=None)  
def factorial(n):  
    if n < 0:  
        return None  
    elif n == 0:  
        return 1  
    else:  
        return n * factorial(n-1)

在上面这个示例中,定义了一个阶乘函数factorial(),并使用lru_cache()装饰器将其缓存起来。通过设置maxsize=None,设置为缓存无限大。然后,可以多次调用factorial()函数,比如:

>>>factorial(2)

>>>factorial(8)

>>>factorial(22)

因为使用lru_cache(maxsize=None)装饰器对factorial函数进行修饰,每次对该函数进行调用时,其结果都会被缓存起来。举例来说,执行factorial(10), factorial(20), factorial(30)等调用,其结果都会被分别缓存。之后,如果再次调用factorial(10), factorial(20), factorial(30),系统会直接从缓存中获取结果,而不会重新进行计算。这样可以显著提高函数的性能,特别是对于那些需要重复计算或从外部资源获取数据的函数。

另外,lru_cache()装饰器不会导致系统崩溃,即使缓存不足也不会受到影响。当缓存已满时,最近最少使用的缓存项将被自动删除,以便为新的缓存项腾出空间。在这种情况下,下次调用该函数时将重新计算其结果,并将其添加到缓存中。因此,使用lru_cache()装饰器可以有效地管理和优化缓存,而不会导致系统崩溃。

相关推荐
CodeCraft Studio5 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
wan5555cn5 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
Broken Arrows6 小时前
Linux学习——管理网络安全(二十一)
linux·学习·web安全
困鲲鲲6 小时前
Python中内置装饰器
python
摩羯座-185690305946 小时前
Python数据可视化基础:使用Matplotlib绘制图表
大数据·python·信息可视化·matplotlib
今天也要学习吖6 小时前
谷歌nano banana官方Prompt模板发布,解锁六大图像生成风格
人工智能·学习·ai·prompt·nano banana·谷歌ai
雁于飞6 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
rannn_1117 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html
爱隐身的官人7 小时前
cfshow-web入门-php特性
python·php·ctf