gpt4 book ai didi

python - @cached_property 和@lru_cache 装饰器的区别

转载 作者:太空狗 更新时间:2023-10-29 22:24:32 25 4
gpt4 key购买 nike

我是 Django 的新手。如果有人能区分 Django 中的 @cached_property 和 @lru_cache 装饰器,那将非常有帮助。另外我什么时候应该在 Django 中使用 which 装饰器。用例会很有帮助。谢谢。

最佳答案

首先,lru_cache 是 Python 语言本身从 3.4 版本开始提供的装饰器; cached_property 是 Django 提供多年的装饰器,直到 2019 年 10 月才被添加到 Python 语言的 3.8 版本中。也就是说,它们是相似的。

lru_cache 在函数式编程中特别有用。它所做的是用一组特定的参数保存函数调用的结果。当一个用lru_cache装饰的函数以相同的参数被多次调用时,装饰器将只返回函数结果的缓存结果。这采用了一种称为 dynamic programming 的编程方法。 ,更具体地说,memoization .使用这些方法,您可以大大加快重复调用计算量大的函数的代码。

Python 还提供了另一个类似的装饰器,叫做 lfu_cache。这两个装饰器都完成了内存,但是使用了不同的 replacement policies。 . lru_cache(最近最少使用)将填充它的缓存,并且必须在下一个装饰函数调用期间踢出一些东西。此替换策略规定最近最少使用的条目将被新数据替换。 lfu_cache(最不常用)指示根据最少使用的条目进行替换。

cached_property 类似于 lru_cache,因为它缓存了昂贵的函数调用的结果。这里唯一的区别是它只能用于方法,这意味着函数属于一个对象。此外,它们只能用于除 self 之外没有其他参数的方法。在 Django 开发期间,您特别希望将其用于访问数据库的类上的方法。 Django docs提及它在具有属性方法 friends 的模型类上的用法。此方法可能会访问数据库以收集一组与该 Person 实例为 friend 的人。因为对数据库的调用很昂贵,所以我们希望缓存该结果以备后用。

关于python - @cached_property 和@lru_cache 装饰器的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49436833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com