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()装饰器可以有效地管理和优化缓存,而不会导致系统崩溃。

相关推荐
青柠之夏cc3 分钟前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
曾晓森10 分钟前
OpenAI 兼容 API 接入山猫云:先核对分组和价格,再发最小请求
网络·python
OKkankan16 分钟前
Python 高阶语法(一):高阶函数、闭包、lambda 与 functools——从底层真正理解装饰器
开发语言·python
传奇开心果编程30 分钟前
【现代声明式UI学与练】第4课 列表渲染与 key——如何高效渲染列表、key 的作用、列表重排时的状态保持
学习·flutter·react native·ui·swiftui·android jetpack
智鸟科技GemeOpen开发者智能设备40 分钟前
平安校园 AI 智能实时告警系统 智鸟科技·GemeOpen + 谷华科技·融合创新方案白皮书
java·开发语言·python·物联网·智能家居
传奇开心果编程41 分钟前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
Space655361 小时前
常见组学技术笔记:从 DNA 基因组学到 Multi-omics
笔记
Sand(ContextGate)1 小时前
Python Agent 测试实战:测试与评估,让 Agent 像传统软件一样可交付
前端·javascript·python·microsoft·ai
yt004yt1 小时前
园区 VOC 绿岛集中治理项目,管网与监测系统设计要点
大数据·学习
一条破秋裤2 小时前
06_从设备读数据_字符设备read_write流程
学习