广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python 的lru_cache装饰器使用简介
  • 444
分享到

Python 的lru_cache装饰器使用简介

2024-04-02 19:04:59 444人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1 从示例说起 2 优化 3 比较 4 lru_cache 装饰器 python 的 lru_cache 装饰器是一个为自定义函数提供缓存功能的装饰器。其内部会在下次以相同参数调

python 的 lru_cache 装饰器是一个为自定义函数提供缓存功能的装饰器。其内部会在下次以相同参数调用该自定义函数时直接返回计算好的结果。通过缓存计算结果可以很好地提升性能。

1 从示例说起

假设我们有一个计算斐波那契数列的求和函数,其内部采用递归方式实现。


from xxx.clock_decorator import clock

@clock
def fibonacci(n):
 if n<2:
  return n
 return fibonacci(n-2)+fibonacci(n-1)

if __name__=='__main__':
 logging.info('fibonacci(6) -> %s',fibonacci(6))

运行结果:

其中的 clock_decorator 实现是一个可以输出某个函数运行时长的装饰器1。

从输出结果中可以看出,存在着严重的重复计算情况,比如 fibonacci(1) 就被计算了 5 次之多。这还只是计算 6 次的 fibonacci 函数。

2 优化

上面的示例代码加入 lru_cache 装饰器:

运行结果:

这次不存在重复计算现象,因此性能得到极大的提升。

3 比较

利用 cProfile 进行性能比较分析。它是一种确定性分析器,只测量 CPU 时间,并不包含内存消耗和其他与内存相关联的信息2。

假设我们需要计算 fibonacci(33) 求和值。

(1)不使用 lru_cache 装饰器

这个递归函数内部总共调用了 1000 多万次的 fibonacci() 函数!

(2)使用了 lru_cache 装饰器

使用了 lru_cache 装饰器之后,这个递归函数只需调用 100 多次fibonacci() 函数!性能有了质的提升。

4 lru_cache 装饰器

lru_cache 装饰器支持两个入参,它的完整定义格式为3: @functools.lru_cache(maxsize=128, typed=False)

参数  默认值  说明
maxsize  128  表示缓存大小。如果设置为 None,则不限大小;如果超过缓存大小,则使用 LRU 策略清理缓存。缓存的大小限制可确保缓存不会无限制增长。LRU(Least Recently Used),即删除最近最少使用的缓存数据。
typed  False  如果为true,不同类型的参数将会被分别缓存,比如区分浮点数与整型。
注意:由于使用了字典来存储缓存,所以所装饰的函数参数必须是可哈希的。
利用 cache_info() 函数,我们还可以看到命中次数 hits,未命中次数 misses ,最大缓存数量 maxsize 和 当前缓存大小 currsize。使用方式是直接调用被装饰函数的 cache_info(),形如:fibonacci.cache_info())。

只要某个函数递归调用并存在重复计算的情况,这时就要记着使用 lru_cache 这个性能加速器。

以上就是Python 的lru_cache 装饰器使用简介的详细内容,更多关于Python 的lru_cache 装饰器的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python 的lru_cache装饰器使用简介

本文链接: https://www.lsjlt.com/news/121675.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 的lru_cache装饰器使用简介
    目录1 从示例说起 2 优化 3 比较 4 lru_cache 装饰器 Python 的 lru_cache 装饰器是一个为自定义函数提供缓存功能的装饰器。其内部会在下次以相同参数调...
    99+
    2022-11-11
  • Python装饰器的介绍及使用方法
    本篇内容主要讲解“Python装饰器的介绍及使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python装饰器的介绍及使用方法”吧!app = Flask(__name...
    99+
    2023-06-17
  • Python property装饰器使用案例介绍
    目录1.property2.property属性定义的两种方式3.案例1.property 装饰器:装饰器是在不修改被装饰对象源代码以及调用方式的前提下为被装饰对象添加新功能的可调用...
    99+
    2022-11-11
  • Python的装饰器详情介绍
    目录1.定义及使用2.@classmethod1.定义及使用 例1:装饰器定义:       def 装饰器函数(外部函数):   ...
    99+
    2022-11-13
  • 简析Python的闭包和装饰器
    什么是装饰器? 装饰器(Decorator)相对简单,咱们先介绍它:“装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数”,听起来有点绕,没关系,直接...
    99+
    2022-06-04
    简析 Python
  • Python中的装饰器使用
    目录Python装饰器总结Python装饰器 Python的装饰器是个好东西,它能干很多事情。 但对于新手,它看起来似乎没那么简单。 但事实上,装饰器本身也只是个函数。 import...
    99+
    2022-12-19
    Python装饰器使用 装饰器使用 Python装饰器
  • Python中怎么使用装饰器装饰函数
    这篇文章将为大家详细讲解有关Python中怎么使用装饰器装饰函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。***个函数deco是装饰函数,它的参数就是被装饰的函数对象。我们可以在deco...
    99+
    2023-06-17
  • 如何使用Python的装饰器
    这篇文章将为大家详细讲解有关如何使用Python的装饰器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.定义及使用例1:装饰器定义:      def 装饰器函数(外部函数...
    99+
    2023-06-29
  • python怎样使用装饰器
    这篇文章将为大家详细讲解有关python怎样使用装饰器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用装饰器def makebold(f): return&n...
    99+
    2022-10-19
  • Python函数的介绍以及装饰器入门用法
    这篇文章主要介绍“Python函数的介绍以及装饰器入门用法”,在日常操作中,相信很多人在Python函数的介绍以及装饰器入门用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python函数的介绍以及装饰器入...
    99+
    2023-06-02
  • python 装饰器的使用与要点
    目录一、装饰器使用场景二、为什么需要装饰器1、先来看一个简单例子:2、增加需求3、又有需求三、基础装饰器入门1、装饰器语法糖2、对带参数的函数进行装饰3、函数参数数量不确定4、装饰器带参数5、functools.wr...
    99+
    2022-06-02
    python 装饰器使用 python 装饰器要点
  • 基于Python编写简单实用的日志装饰器
    目录1.简陋版装饰器2.普通版装饰器3.优化版装饰器在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源。 其实,只需要写一个非常简单的日志装饰器,我们就能...
    99+
    2022-11-11
  • Python之zhon库的简介、安装、使用方法
    zhon是一个Python库,用于处理中文文本。它提供了一些有用的工具和数据,例如中文标点符号、简体和繁体中文字符集等。安装zhon...
    99+
    2023-09-08
    Python
  • Pywin32:Python库的简介、安装和使用攻略
    Pywin32:Python库的简介、安装和使用攻略 Pywin32是Python的一个强大而广泛使用的库,它提供了访问Windows API的接口,以实现处理Windows系统资源的功能,如窗口管理...
    99+
    2023-09-03
    python windows 开发语言
  • python中装饰器怎么使用
    这篇文章给大家分享的是有关python中装饰器怎么使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、装饰器使用场景经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解...
    99+
    2023-06-15
  • python @property 装饰器使用方法
    目录一、property的装饰器用法二、举例说明1.不用setter和getter方法的实现2.使用setter和getter的实现,增加温度值输入的限制3.利用property装饰...
    99+
    2022-11-13
  • Python中如何使用装饰器?
    类方法和静态方法有点相似,他们都推荐使用类来调用(其实也可以使用对象来调用) 定义类方法 —使用@classmetho修饰(函数装饰器) —方法的第一个参数定义为cls(class的缩写),用类调用该方法时该参数会自动绑定 定义静...
    99+
    2023-01-31
    如何使用 Python
  • 如何使用Python装饰器Decorator
    本篇内容介绍了“如何使用Python装饰器Decorator”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1. 叠加使用Pyth...
    99+
    2023-06-15
  • python编程PyAutoGUI库使用与安装简介
    如何通过python代码解放双手,或者通过代码实现自动的电脑鼠标or键盘操作呢?  python的PyAutoGUI库是一个很好地选择。 首先根据下面这个网址下载PyAut...
    99+
    2022-11-12
  • python中装饰器的用法
    这篇文章主要介绍python中装饰器的用法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、装饰器使用场景经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作