缓存装饰器@cached_property

devtools/2024/12/22 2:22:20/

这个装饰器好像在好多包里都有,我在阅读源码的过程中,transformers.utils也有这个。查阅资料,大体上了解了它的用法。参考:[python]@cached_property缓存装饰器 - faithfu - 博客园

这个装饰器用在类里面的某个方法前面,当实例化这个类,然后第一次调用这个方法的时候会执行一次改方法,返回一个结果,后面如果再调用,就不执行,而是直接返回第一次运行的结果了,避免重复调用,节省了时间。

下面是一个不使用`@cached_property`的例子

此时func1这个函数,就是一个方法,没有被缓存,要是使用这个值那就得用`demo.fun1()`重新运行一遍。

加入`@cached_property`之后,

`demo.fun1`变成了一个类似于属性的东西,可以直接当成属性使用。并且执行一次后,该值将不会改变。

这个装饰器和`@property`是一对,`@property`将方法变成属性,但是访问一次重新执行一次,而`@cached_property`执行一次就不变了。


http://www.ppmy.cn/devtools/114701.html

相关文章

Parallels Desktop 20破解版(Mac虚拟机) v20.0.0 for Mac 最新商业版(支持M系列)

Parallels Desktop 20是一款目前功能最强大灵活度最高的虚拟机软件,可运行数千种 Windows 应用程序,如 Microsoft Office、Internet Explorer、Access、Quicken、QuickBooks、Visual Studio,甚至支持对图像要求较高的游戏和 CAD 项目&#xf…

Zookeeper工作机制和特点

1. Zookeeper工作机制 Zookeeper从设计模式角度来理解: 是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的 注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知…

C#区分值类型和引用类型【一文读懂】

目录 C#区分值类型和引用类型 1. 存储位置 2. 数据类型 3. 赋值 4. 默认值 5. 内存管理 本篇文章来分享一下C#的值类型和引用类型,主要从存储位置,数据类型,赋值,默认值,内存管理5个方面进行区分。 C#区分值类型…

如何理解BCEWithLogitsLoss()

1.示例1 logit[0.5 -1.0 2.0] targets[1 0 1]# δsigmoid(x) pδ(logits)[δ(0.5) δ(-1.0) δ(2.0)][0.6225 0.2689 0.8808]loss1 -[1 log(0.6225) 0 log(1 - 0.6225)] ≈ 0.4744 loss2 -[0 log(0.2689) 1 log(1 - 0.2689)] ≈ 0.3133 loss3 -[1 log(0.8808) 0 …

23.面试题02.07链表相交

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode apheadA;ListNode bpheadB;int lenA0,lenB0;//求两个链表长度while(ap!null){apap.next;lenA;}while(bp!null){bpbp.next;lenB;}apheadA;bpheadB;int len0;//用来计算让…

【Day14-单例设计模式动态代理】

单例设计模式 什么是设计模式(Design pattern) ? 一个问题通常有n种解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。设计模式有20多种,对应20多种软件开发中会遇到的问题…

如何删除EXCELL文件中的空行?

1,选择某一列 2,点击《开始》《查找和选择》>《定位条件》,调出《定位条件》的选择框; 3,在定位条件选项框,选择《空值》; 4,找到变灰被选中的某一行,右击《删除》 5&…

C++: 类和对象(上)

📔个人主页📚:秋邱-CSDN博客☀️专属专栏✨:C🏅往期回顾🏆:从C语言过渡到C🌟其他专栏🌟:C语言_秋邱 ​ 面向过程和面向对象 C 语言被认为是面向过程的编程…