如何在Python中缓存方法调用?

如何在python中缓存方法调用?

用于缓存方法的两个工具是 functools.cached_property() 和 functools.lru_cache()。这两个模块都是 functools 模块的一部分。 functools 模块用于高阶函数:作用于或返回其他函数的函数。让我们首先安装并导入 functools 模块 –

安装 functools

要安装functools模块,请使用pip −

pip install functools

登录后复制

导入函数工具

要导入functools −

import functools

登录后复制

让我们一一了解缓存 –

立即学习“Python免费学习笔记(深入)”;

cached_property()

对于实例的昂贵计算属性很有用,否则这些属性实际上是不可变的。

cached_property 方法仅适用于不带任何参数的方法。它不会创建对实例的引用。仅当实例处于活动状态时,才会保留缓存的方法结果。

这样做的好处是当实例不再使用时,缓存的方法结果会立即释放。缺点是如果实例累积,累积的方法结果也会累积。他们可以无限制地成长。

Example

的中文翻译为:

示例

让我们看一个例子 –

class DataSet:   def __init__(self, sequence_of_numbers):      self._data = tuple(sequence_of_numbers)   @cached_property   def stdev(self):      return statistics.stdev(self._data)

登录后复制

lru_cache

lru_cache 方法适用于具有可散列参数的方法。除非特别努力传递弱引用,否则它会创建对实例的引用。

最近最少使用算法的优点是缓存受到指定的最大大小的限制。缺点是实例会一直保持活动状态,直到它们从缓存中过期或者缓存被清除。

Example

的中文翻译为:

示例

让我们看一个例子 –

@lru_cachedef count_vowels(sentence):   return sum(sentence.count(vowel) for vowel in 'AEIOUaeiou')

登录后复制

使用缓存计算斐波那契数的示例 −

from functools import lru_cache@lru_cache(maxsize=None)def fib(n):   if n 

输出

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)

登录后复制

缓存示例

现在,让我们看一下 functool cached_property() 和 lru_cache 的完整示例 -

from functools import lru_cachefrom functools import cached_propertyclass Weather:   "Lookup weather information on a government website"   def __init__(self, station_id):      self._station_id = station_id      # The _station_id is private and immutable      def current_temperature(self):      "Latest hourly observation"      # Do not cache this because old results      # can be out of date.   @cached_property   def location(self):      "Return the longitude/latitude coordinates of the station"      # Result only depends on the station_id   @lru_cache(maxsize=20)   def historic_rainfall(self, date, units='mm'):      "Rainfall on a given date"      # Depends on the station_id, date, and units.

登录后复制

以上就是如何在Python中缓存方法调用?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2224134.html

(0)
上一篇 2025年2月26日 10:47:18
下一篇 2025年2月26日 10:47:34

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何通过代码优化加快Python网站的访问速度?

    如何通过代码优化加快Python网站的访问速度? 随着互联网的迅猛发展,网站的访问速度对于用户体验和搜索引擎优化至关重要。编写高效的代码可以加快Python网站的访问速度。本文将介绍一些优化技巧和代码示例来提高Python网站的性能。 使用…

    2025年2月24日
    300
  • 如何在Yii框架中使用缓存(Caching)功能

    如何在yii框架中使用缓存(caching)功能 缓存是一种常见的性能优化方式,可以显著提高网站或应用程序的响应速度。Yii框架提供了强大的缓存功能,能够帮助我们简化缓存的使用和管理过程。本文将介绍在Yii框架中如何使用缓存功能,并提供一些…

    编程技术 2025年2月22日
    300

发表回复

登录后才能评论