当前位置: 首页 > news >正文

Python 的 @lru_cache() 装饰器

在 Python 标准库的 functools 模块中,有个 lru_cache 装饰器,用于为一个函数添加缓存系统:

  • 存储函数的输入和对应的输出
  • 当函数被调用,并且给出了已经缓存过的输入,那么函数不会再运行,而是直接从缓存中获取对应的输出
  • 有两个可选参数
    • maxsize 设置缓存的大小,设置后,缓存的大小就会被限制在这个值之内(缓存默认没有上限)
      • 当缓存达到上限时,最近最少使用的缓存会被移除
    • typed 如果设置为 True 后,会根据输入参数的类型分别进行缓存(默认是 False 即不分类型)
      • 例如 11.0 尽管在 Python 中是相等的,但是会被当成两个不同的输入进行缓存
  • 有两个方法用于清理和查看缓存
    • cache_clear() 清空所有的缓存
    • cache_info() 返回一个包含缓存状态的命名元组,包含以下几个字段
      • hits 缓存命中的次数
      • misses 缓存未命中的次数
      • maxsize 缓存的最大容量
      • currsize 当前缓存的使用量

本质上,这个 lru_cache 装饰器是通过空间换取时间的方式来提高程序的性能,所以 lru_cache 装饰器并不适合所有的场景:

  • 合适的场景
    • 具有重复计算的递归函数
    • 计算成本较高的函数
    • 计算密集型或者需要大量重复计算的函数
  • 不合适的场景
    • 函数运行在内存有限的环境中
    • 函数有大量的不同输入
    • 函数有副作用,或者依赖于外部状态

通过下面的例子可以很好的理解 @lru_cache() 的用法:

from functools import lru_cache@lru_cache()
def abc(name: str):print(f'缓存 name = {name}')return nameabc('1')
# 缓存 name = 1
# '1'abc('2')
# 缓存 name = 2
# '2'abc('3')
# 缓存 name = 3
# '3'abc('1')
abc('2')
abc('3')
# '1'
# '2'
# '3'abc.cache_info()
# CacheInfo(hits=3, misses=3, maxsize=128, currsize=3)abc('3')
# '3'
abc.cache_info()
# CacheInfo(hits=4, misses=3, maxsize=128, currsize=3)abc.cache_clear()
abc.cache_info()
# CacheInfo(hits=0, misses=0, maxsize=128, currsize=0)

相关文章:

Python 的 @lru_cache() 装饰器

在 Python 标准库的 functools 模块中,有个 lru_cache 装饰器,用于为一个函数添加缓存系统: 存储函数的输入和对应的输出当函数被调用,并且给出了已经缓存过的输入,那么函数不会再运行,而是直接从缓存中获…...

Swift制作打包framework

新建framework项目 设置生成fat包,包括模拟器x86_64和arm64 Buliding Settings -> Architectures -> Build Active Architecture Only 设置为NO 设置打包环境,选择release edit Scheme -> run -> Build configuration 设置为 Release 设置…...

无线WiFi安全渗透与攻防(N.2)WPA渗透-使用airolib-ng创建彩虹表加速

WPA渗透-使用airolib-ng创建彩虹表加速 WPA渗透-使用airolib-ng创建彩虹表加速1.什么是彩虹表?2.渗透wifi1.创建数据库名2.将字典导入数据库3.生成渗透wifi密码的PMK4.生成需要渗透wifi的彩虹表5.渗透wifiWPA渗透-使用airolib-ng创建彩虹表加速 1.什么是彩虹表? 彩虹表是一…...

整形数据和浮点型数据在内存中的存储差别

愿所有美好如期而遇 我们先来看代码,猜猜结果是什么呢? int main() {//以整型数据的方式存储int n 10;float* m (float*)&n;//以整型数据的方式读取printf("%d\n", n);//以浮点型数据的方式2读取printf("%f\n", *m);printf(&…...

【Python基础篇】运算符

博主:👍不许代码码上红 欢迎:🐋点赞、收藏、关注、评论。 格言: 大鹏一日同风起,扶摇直上九万里。 文章目录 一 Python中的运算符二 算术运算符1 Python所有算术运算符的说明2 Python算术运算符的所有操作…...

开启数据库审计 db,extended级别或os级别)并将审计文件存放到/opt/oracle/audit/下

文章目录 1、登录到数据库2、查看审计状态3、创建审计目录4、启用审计5、设置审计文件路径6、再次查看结果 1、登录到数据库 使用SQL*Plus或者其他Oracle数据库客户端登录到数据库。 sqlplus / as sysdba;2、查看审计状态 show parameter audit;目前是DB状态,并且…...

02.webpack中多文件打包

1.module,chunk,bundle的区别 moudle - 各个源码文件,webpack中一切皆是模块chunk - 多模块合并成的,如entry, import(), splitChunkbundle - 最终的输出文件 2.多文件打包配置 2.1 webpack.common.js const path require(path) const HtmlWebpackPl…...

IEEE Standard for SystemVerilog Chapter 22. Compiler directives

22.1 General 此子句描述以下编译器指令(按字母顺序列出): __FILE__ [22.13] __LINE__ [22.13] begin_keywords [22.14] celldefine [22.10] default_net…...

机器学习中的独立和同分布 (IID):假设和影响

一、介绍 在机器学习中,独立和同分布 (IID) 的概念在数据分析、模型训练和评估的各个方面都起着至关重要的作用。IID 假设是确保许多机器学习算法和统计技术的可靠性和有效性的基础。本文探讨了 IID 在机器学习中的重要性、其假设及其对模型开…...

PTP软硬件时间戳

软硬件时间戳 抄袭来源:http://www.bdtime.com.cn/pinlv/4296.html PTP 是一种网络协议,用于在计算机网络中进行时钟校准和时间同步。硬件时间戳和软件时间戳是在实现 PTP 时常见的两种方式,它们在精度、可靠性、实时性以及资源消耗等方面存…...

使用ADS进行serdes仿真时,Tx_Diff中EQ的设置对发送端波形的影响。

研究并记录一下ADS仿真中Tx_Diff的EQ设置。原理图如下: 最上面是选择均衡方法Choose equalization method:Specify FIR taps,Specify de-emphasis和none。 当选择Specify de-emphasis选项时,下方可以输入去加重具体的dB值&#x…...

数据库迁移(DBeaver版本)

最近需要做一个数据库迁移, 测试环境开发的差不多了,需要将脚本迁移到生产。 中间了试了一些工具,比如Jetbrain出品的datagrip,这个数据库工具平时还是很好用的,但是数据迁移感觉不是那么好用,所以还是用到…...

【c++STL常见排序算法sort,merge,random_shuffle,reverse】

文章目录 C STL 常见排序算法详解1. sort 算法2. merge 算法3. random_shuffle 算法4. reverse 算法 C STL 常见排序算法详解 1. sort 算法 功能&#xff1a;sort 用于对容器内的元素进行升序排序。示例代码&#xff1a;#include <iostream> #include <algorithm>…...

STM32/N32G455国民科技芯片驱动DS1302时钟---笔记

这次来分享一下DS1302时钟IC&#xff0c;之前听说过这个IC&#xff0c;但是一直没搞过&#xff0c;用了半天时间就明白了原理和驱动&#xff0c;说明还是很简单的。 注&#xff1a;首先来区分一下DS1302和RTC时钟有什么不同&#xff0c;为什么不直接用RTC呢&#xff1f; RTC不…...

基于PLC的污水厌氧处理控制系统(论文+源码)

1. 系统设计 污水厌氧由进水系统通过粗格栅和清污机进行初步排除大块杂质物体以及漂浮物等&#xff0c;到达除砂池中。在除砂池系统中细格栅进一步净化污水厌氧中的细小颗粒物体&#xff0c;将污水厌氧中的细小沙粒滤除后进入氧化沟反应池。在该氧化沟系统中进行生化处理&…...

Unity之NetCode多人网络游戏联机对战教程(9)--NetworkAnimator组件

文章目录 前言NetworkAnimatorAnimator的Trigger属性服务器权威模式&#xff08;Server Authoritative Mode&#xff09;客户端权威模式 (Owner Authoritative Mode)学习文档 前言 这个组件是NetCode常用的组件之一&#xff0c;NetworkAnimator跟NetworkTransform一样&#xf…...

iceoryx之Roudi

目录...

.Net(C#)常用转换byte转uint32、byte转float等

1、byte转String Encoding.ASCII.GetString(byte[]); 2、base64string转byte byte[]Base64Decoder.Decoder.GetDecoded(string); 3、byte转UInt16 方法一 (UInt16)(bytes[0] * 256 bytes[1]) 方法二 (UInt16)((bytes[0] << 8) | bytes[1]); 方法三 字节序要对…...

windows快捷方式图标变成空白

今天突然有客户说应用程序快捷方式图标变成了空白&#xff0c;就研究了一下&#xff0c;网上找了一下很多都说是什么图标缓存有问题&#xff0c;试过之后发现并不能解决问题。 然后发现用户的文件上都一把黄色的小锁的标志&#xff0c;查了一下说是文件属性里面设置加密之后就会…...

【Linux系统编程十九】:(进程通信)--匿名管道/模拟实现进程池

【Linux系统编程十九】&#xff1a;匿名管道原理/模拟实现进程池 一.进程通信理解二.通信实现原理三.系统接口四.五大特性与四种情况五.应用场景--进程池 一.进程通信理解 什么是通信&#xff1f; 通信其实就是一个进程想把数据给另一个进程&#xff0c;但因为进程具有独立性…...

英雄联盟自动化助手:提升游戏效率的全方位解决方案

英雄联盟自动化助手&#xff1a;提升游戏效率的全方位解决方案 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari作为一…...

解锁JSON Viewer 3大效率黑科技:从数据解析到开发提效的全流程解决方案

解锁JSON Viewer 3大效率黑科技&#xff1a;从数据解析到开发提效的全流程解决方案 【免费下载链接】json-viewer It is a Chrome extension for printing JSON and JSONP. 项目地址: https://gitcode.com/gh_mirrors/js/json-viewer JSON Viewer是一款专为开发者打造的…...

Z-Image-Turbo商业应用探索:稳定可靠的AI绘画方案推荐

Z-Image-Turbo商业应用探索&#xff1a;稳定可靠的AI绘画方案推荐 1. 商业级AI绘画的新选择 在数字内容创作需求爆炸式增长的今天&#xff0c;Z-Image-Turbo作为阿里通义实验室开源的文生图模型&#xff0c;凭借其卓越的稳定性和高效性&#xff0c;正在成为商业应用领域的新宠…...

忍者像素绘卷微信小程序接入:用户提示词历史+生成图云存储方案

忍者像素绘卷微信小程序接入&#xff1a;用户提示词历史生成图云存储方案 1. 项目背景与核心价值 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站&#xff0c;将16-Bit复古游戏美学与现代AI图像生成技术完美结合。这款工具特别适合创作具有忍者主题和复古像素…...

XPath与lxml解析库

test.xml<?xml version"1.0" encoding"utf-8"?><bookstore><book name"halibote"><title lang"en">Harry Potter</title><author>J K. Rowling</author><year>2005</year>&l…...

vLLM-v0.17.1保姆级教程:vLLM + Weights Biases 实验跟踪实践

vLLM-v0.17.1保姆级教程&#xff1a;vLLM Weights & Biases 实验跟踪实践 1. vLLM框架简介 vLLM是一个专注于大语言模型推理和服务的开源库&#xff0c;以其出色的性能和易用性在开发者社区中广受欢迎。这个项目最初由加州大学伯克利分校的天空计算实验室发起&#xff0…...

用Python+Matplotlib动手验证:标准DH和改进DH建模同一机械臂,结果真的相同吗?

PythonMatplotlib实战&#xff1a;标准DH与改进DH建模机械臂的等价性验证 机械臂运动学建模是机器人学中的基础课题&#xff0c;而Denavit-Hartenberg&#xff08;DH&#xff09;参数法则是其中最经典的建模方法之一。标准DH&#xff08;sDH&#xff09;与改进DH&#xff08;mD…...

G-Helper完全手册:华硕笔记本终极性能调优指南

G-Helper完全手册&#xff1a;华硕笔记本终极性能调优指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: http…...

I2CLCD驱动库:HD44780字符屏的I²C轻量级嵌入式驱动

1. I2CLCD库概述&#xff1a;面向嵌入式系统的字符型LCD IC适配驱动I2CLCD是一个轻量级、高可靠性的开源驱动库&#xff0c;专为将标准HD44780兼容的字符型LCD&#xff08;如1602、2004&#xff09;通过IC总线接入嵌入式系统而设计。其核心价值在于以最小硬件资源开销实现LCD控…...

5G技术解析:深入理解5GNR帧结构与空口资源分配

1. 5GNR帧结构的设计原理 第一次接触5GNR帧结构时&#xff0c;我被那些密密麻麻的时隙和符号搞得头晕眼花。但真正理解后才发现&#xff0c;这套设计就像乐高积木一样精巧。5GNR帧结构延续了4G LTE的10ms帧和1ms子帧设计&#xff0c;但玩出了更多花样。 最关键的改变在于时隙灵…...