函数返回值缓存是优化一个函数的常用手段。我们可以将函数、输入参数、返回值全部保存起来,当下次以同样的参数调用这个函数时,直接使用存储的结果作为返回(不需要重新计算)。

函数缓存允许我们将一个函数对于给定参数的返回值缓存起来。当一个I/O密集的函数被频繁使用相同的参数调用的时候,函数缓存可以节约时间。

Python 3.2及以后版本

我们来实现一个斐波那契计算器,并使用lru_cache。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from functools import lru_cache@lru_cache(maxsize=32)
def fib(n):if n < 2:return nreturn fib(n-1) + fib(n-2)>>> print([fib(n) for n in range(10)])
# Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]# 我们也可以轻松地对返回值清空缓存,通过这样:
fib.cache_clear()
那个maxsize参数是告诉lru_cache,最多缓存最近多少个返回值。

functools模块和cachetools模块都提供了类似的缓存机制。

functools提供了lru_cache,如果缓存数据超出参数maxsize的值,就用LRU(最少最近使用算法)清除最近很少使用过的缓存结果

而cachetools模块提供了更多缓存失效策略:

  • LFUCache(Least Frequently Used (LFU) cache implementation.)
  • LRUCache(Least Recently Used (LRU) cache implementation.)
  • RRCache(Random Replacement (RR) cache implementation.)
  • TTLCache(LRU Cache implementation with per-item time-to-live (TTL) value.)

Python 2系列版本

你可以创建任意种类的缓存机制,有若干种方式来达到相同的效果,这完全取决于你的需要。
这里是一个一般的缓存:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from functools import wrapsdef memorize(function):memo = {}@wraps(function)def wrapper(*args):if args in memo:return memo[args]else:rv = function(*args)memo[args] = rvreturn rvreturn wrapper@memorize
def fibonacci(n):if n < 2: return nreturn fibonacci(n - 1) + fibonacci(n - 2)fibonacci(25)

总结:

函数的缓存是通过闭包实例来实现的,对于每一个被加上cache装饰器的函数,运行时都会被创建一个不同的闭包实例。

参数的缓存是通过闭包实例中引入的哈希表(dict)的key来保存的。

返回值的缓存是通过字典形式保存,键为函数参数,值为函数返回值,。

Python 函数缓存 (Function caching)相关推荐

  1. 函数缓存 (Function caching)

    函数返回值缓存是优化一个函数的常用手段.我们可以将函数.输入参数.返回值全部保存起来,当下次以同样的参数调用这个函数时,直接使用存储的结果作为返回(不需要重新计算). 函数缓存允许我们将一个函数对于给 ...

  2. Python零基础速成班-第5讲-Python函数,Function和Lambda基础

    Python零基础速成班-第5讲-Python函数,Function和Lambda基础 学习目标 Function函数 Lambda Function函数 课后作业(4必做) 友情提示:将下文中代码拷 ...

  3. Python学习笔记:函数(Function)

    Python学习笔记:函数(Function) 一.函数基本概念 函数是Python里组织与重用代码最重要的方法.一般来说,如果你期望多次重复相同或相似的代码,写一个可重用的函数可能是值得的.函数通过 ...

  4. python中的函数(function)也是对象(二分钟读懂)

    python中的函数(function) 在python中函数也是对象 对象是内存中专门用来存储的数据的一块区域 函数可以用来保存一些可执行的代码(储存的都是语句), 需要时, 对这些语句进行多次的调 ...

  5. python method与function方法_学编程这么久,还傻傻分不清什么是方法(method),什么是函数(function)?...

    在编程语言中有两个很基础的概念,即方法(method)和函数(function).如果达到了编程初级/入门级水平,那么你肯定在心中已有了初步的答案. 也许在你心中已有答案了 除去入参.返回值.匿名函数 ...

  6. Python中类(class)与函数(function)的区别

    分享知识  传递快乐 在 Python 中一直以来都以为函数(function)和方法(method)是一个东西,但后来发现两者是不一样的,那么两者之间有什么区别呢?先看段代码: 代码1: def f ...

  7. Python编程基础:第五十三节 匿名函数Lambda Function

    第五十三节 匿名函数Lambda Function 前言 实践 前言 匿名函数是一种非常优雅的表达方式,它可以将函数定义用一行代码进行表示.其书写方式为参数列表:函数实现,其中多个参数之间用逗号隔开, ...

  8. Python编程基础:第四十六节 super函数Super Function

    第四十六节 super函数Super Function 前言 实践 前言 使用super函数可以在子类中直接调用父类的方法.通常情况下,我们会将一些通用的属性或方法定义在父类中,子类可以直接使用父类中 ...

  9. python装饰器原理-Python函数装饰器原理与用法详解

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

最新文章

  1. 老婆给当程序员的老公打电话:今天下班顺路买斤元宵……
  2. C# 空合并运算符 ??
  3. r语言调用dll出现错误载入表里没有c字符名,R语言(示例代码)
  4. python画统计图怎么在右上角表示哪条线代表什么_Python-matplotlib统计图之箱线图漫谈...
  5. hdu 5017 Ellipsoid(西安网络赛 1011)
  6. Java基础学习之(二)—对象与类的方法参数
  7. “对不起,我们只招有出色背景的技术人员!”
  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_33、SpringBoot2.x整合Mybatis3.x注解实战...
  9. 毕设-基于SpringBoot度假村租房管理系统
  10. c51单片机音乐门铃C语言程序,51单片机音乐门铃的设计
  11. 使用netron实现对onnx模型结构可视化
  12. IOS流媒体播放器V1.1_rtsp、rmtp、m3u8、mms、mmsh
  13. 限流是解决高并发大流量的一种方案,至少是可以保证应用的可用性
  14. Android 系统性能优化
  15. 全新数据增强 | TransMix 超越Mix-up、Cut-mix方法让模型更加鲁棒、精度更高
  16. Django笔记 CMS框架Mezzanine 2
  17. Name or service not known, ping域名报错
  18. python字典添加元素的2种方法_python中怎么向字典添加元素
  19. hr2000 光谱Matlab,HR2000+光纤光谱仪
  20. 计算机与心理健康教育,计算机教学中的心理健康教育

热门文章

  1. Linux下基于Libmad库的MP3音乐播放器编写
  2. JPA 2.1: What is new
  3. arrayfunction[LeetCode]Convert Sorted Array to Binary Search Tree
  4. Hibernate里自定义UserType时取不到值的问题
  5. python requests 异步调用_带有Python请求的异步请求
  6. 【ABAP】 汇票收款自动过账FM
  7. 【MM模块】Sub Range 供应商子范围
  8. 一样是做鸭,绝味与周黑鸭的利润为何相差那么大?
  9. 如何做SEO项目管理?
  10. 伟大:看谷歌如何造福人类健康事业