lru_cache vs cache

在Python中,lru_cachecache都是functools模块提供的装饰器,用于缓存函数的结果,但它们的功能和使用场景略有不同。

functools.lru_cache

lru_cache表示“最近最少使用”缓存。它是一个装饰器,用于缓存函数调用的结果。当缓存达到设定的最大容量时,会丢弃最近最少使用的缓存项。这对于一些计算量大且频繁调用的函数非常有用。

  • 语法@functools.lru_cache(maxsize=128, typed=False)

  • 参数

    • maxsize:指定缓存的最大容量。如果设置为None,缓存大小不受限制。
    • typed:如果设置为True,则会将不同类型的参数视为不同的调用(例如,f(3)f(3.0)会分别缓存)。
  • 示例

    from functools import lru_cache@lru_cache(maxsize=100)
    def expensive_function(x):# 模拟耗时计算return x * x
    

functools.cache

cache是一个更简单版本的缓存装饰器。它是lru_cache(maxsize=None)的别名,表示提供一个不受限制的缓存。这在需要缓存所有函数调用结果且不考虑缓存淘汰策略时非常有用。

  • 语法@functools.cache

  • 示例

    from functools import cache@cache
    def expensive_function(x):# 模拟耗时计算return x * x
    

关键区别

  1. 淘汰策略

    • lru_cache:使用最近最少使用的淘汰策略。当缓存达到最大容量时,丢弃最近最少使用的项。
    • cache:没有淘汰策略,缓存项数量不受限制。
  2. 定制化

    • lru_cache:允许设置缓存大小(maxsize)和类型敏感性(typed)。
    • cache:没有定制化选项,相当于lru_cache(maxsize=None)

使用场景

  • lru_cache:适用于需要限制内存使用且对使用顺序敏感的缓存场景。
  • cache:适用于需要简单且不受限制的缓存场景。

leetcode

题目:https://leetcode.cn/problems/special-permutations/description/

我讲下述代码提交后,发现 @lru_cache(maxsize=None) 时间超时, @cache 能够成功提交;

建议大家leetcode 刷题的时候,还是使用 @cache 好一点,简单无脑还快一点;

class Solution:def specialPerm(self, nums: List[int]) -> int:@cache# @lru_cache(maxsize=None)def dfs(rear:int, lefts: tuple):if len(lefts) == 0:return 1res = 0for item in lefts:if item % rear == 0 or rear % item == 0:res += dfs(item, tuple(set(lefts) - set([item])))return res % (1e9 + 7)res = 0for item in nums:res += dfs(item, tuple(set(nums) - set([item])))return int(res % (1e9 + 7))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能工厂中滑环应用的集成式和分立式数据接口解决方案

第四次工业革命通过在生产过程中实现新场景来推动数字化制造向前发展。这些场景依赖于基本的设计原则,包括器件互联、信息透明、技术协助,以及分散决策。没有先进的无线通信技术,就无法在现代智能工厂中实现所有这些原则。它们支持在广泛的领…

Java露营基地预约小程序预约下单系统源码

轻松开启户外探险之旅 🌟 露营热潮来袭,你准备好了吗? 随着人们对户外生活的热爱日益增加,露营已成为许多人周末和假期的首选活动。但你是否曾因找不到合适的露营基地而烦恼?或是因为繁琐的预约流程而错失心仪的营地…

三大关键技术看RAG如何提升LLM的能力

大语言模型表现出色,但是在处理幻觉、使用过时的知识、进行不透明推理等方面存在挑战。检索增强生成(RAG)作为一个新兴的解决方案,通过整合外部知识库的数据,提高了模型在知识密集型任务中的准确性和可信度&#xff0c…

(9)农作物喷雾器

文章目录 前言 1 必要的硬件 2 启用喷雾器 3 配置水泵 4 参数说明 前言 Copter 包括对农作物喷雾器的支持。该功能允许自动驾驶仪连接到一个 PWM 操作的泵和(可选)旋转器,根据飞行器速度控制液体肥料的流动速度。 稍微过时的视频显示了…

AI道德文化构建:迈向可持续发展的智能未来

引言随着人工智能技术的飞速发展,AI已经逐渐融入我们生活的方方面面。然而,随着AI技术的广泛应用,人们开始关注AI的道德和文化问题。本文将探讨AI道德文化构建的重要性,以及如何实现可持续发展的智能未来。 AI人工智能发展的道德文化挑战在探讨人工智能(AI)所面临的安全威…

高质量数据不够用,合成数据是打开 AGI 大门的金钥匙吗?

编者按: 人工智能技术的发展离不开高质量数据的支持。然而,现有可用的高质量数据资源已日渐接近枯竭边缘。如何解决训练数据短缺的问题,是当前人工智能领域亟待解决的一个较为棘手的问题。 本期文章探讨了一种经实践可行的解决方案 —— 合成…

如何从零开始搭建成功的谷歌外贸网站?

先选择一个适合外贸网站的建站平台,如WordPress或Shopify。这些平台提供丰富的主题和插件,可以帮助你快速搭建和定制网站。设计网站时,注重用户体验,确保导航清晰、页面加载快速、移动端友好。确保网站的SEO优化。从关键词研究开始…

python turtle 001画两只小狗

效果图: 代码: pythonturtle001画两只小狗资源-CSDN文库 # 作者V w1933423import turtle # 导入turtle模块def draw_dogs():turtle.setup(800, 800) # 设置画布大小为800x800p turtle.Pen() # 创建一个画笔对象p.pensize(14) # 设置画笔大小为14p.…

DataX及DataX-Web部署

DataX及DataX Web部署 相关链接: DataX:https://github.com/alibaba/DataXDataX文档:https://github.com/alibaba/DataX/blob/master/userGuid.mdDataX Web:https://github.com/WeiYe-Jing/datax-webDataX Web文档:h…

11.xss之href输出

11.xss之href输出 后台配置文件中的代码 xss之href输出绕过:javascript:alert(1111) 直接代入a标签herf里面一样可以绕过htmlspecialchars 输入攻击代码 javascript:alert(1111)点击蓝色字体直接会弹窗,如图所示:

手机pdf删除怎么办?只需要2招,就可以快速恢复耶

PDF文件,这个我们日常生活中的常客,越来越受到大家的喜爱。但是,有时候我们会因为一时的疏忽或者清理手机内存而不小心删掉了重要的PDF文件,这可真是让人头疼啊!那么,这些pdf删除后,有没有什么好…

汇凯金业:预测黄金现货涨跌趋势的关键方法

在金融市场中,黄金现货作为一种重要的避险资产,价格波动受到全球经济、货币政策、市场情绪等多重因素的影响。要有效预测黄金现货的涨跌趋势,不仅需深刻理解这些因素,还需掌握一系列的分析技巧。本文将详细介绍一些关键的分析方法…

探索表单获取与处理在Web开发中的重要性与实践

在Web开发中,表单是用户与应用程序交互的重要方式之一。通过表单,用户可以输入和提交数据,而开发者则需要获取、验证和处理这些数据,以完成各种操作。本文将探讨如何在Web开发中获取表单数据,以及处理表单数据时的一些…

事务性邮件发送如何选择邮件群发工具

在数字营销的海洋中,事务性邮件如同灯塔,指引着用户在与品牌的互动中前行。它们是自动化的使者,及时响应用户的行为,传递关键信息。然而,选择正确的邮件群发工具,是确保这些信息有效传达的关键。本文将带您…

Kafka入门-基础概念及参数

一、Kafka术语 Kafka属于分布式的消息引擎系统,它的主要功能是提供一套完备的消息发布与订阅解决方案。可以为每个业务、每个应用甚至是每类数据都创建专属的主题。 Kafka的服务器端由被称为Broker的服务进程构成,即一个Kafka集群由多个Broker组成&#…

Qt QML 坑

Qt QML 坑 QML Listview 1、不定高item 导致item重叠 ListView {id: _cityListViewproperty var _cityArray: [{ type:"A",cityArray:[]},{ type:"B",cityArray:[]},{ type:"C",cityArray:[]},{ type:"D",cityArray:[]}]model: List…

Java银系统/超市收银系统/智慧新零售/ERP进销存管理/线上商城/h5/小程序

>>>系统简述: 神点收银系统支持B2B2C多商户模式,系统基于前后端分离的架构,后端采用Java SpringBoot Mysql Mybatis Plus,前端基于当前流行的Uniapp、Element UI,支持小程序、h5。架构包含:会员端…

Mybatis插入操作 主键自增 返回成功 但是数据库没有数据

插入操作成功,消耗了一个主键,但是数据库没有看到相关数据。一般这种情况说明可能事务没有执行成功,事务回滚了。数据库操作要通过 ACID规则来约束事务,即原子性(Atomicity)、一致性(Consistenc…

项目里出现两个配置类继承WebMvcConfigurationSupport时,为什么只有一个会生效(源码分析)

为什么我们的项目里出现两个配置类继承WebMvcConfigurationSupport时,只有一个会生效。我在网上找了半天都是说结果的,没有人分析源码到底是为啥,博主准备讲解一下,希望可以帮到大家! 大家基本遇到过一种情况&#xff…

互联网摸鱼日报(2024-06-26)

互联网摸鱼日报(2024-06-26) 36氪新闻 继南非后,巴基斯坦光储市场爆发 | 最前线 能源专家谈产能过剩:“卷”是市场经济的固有特征 | 最前线 Manner,有理想的人也伤心 详解开源闭源之争,十家大模型厂商的商战策略 试水一年即被…