python通过重复调用函数来节省计算能力



假设我有以下函数,它取x和y。

def calculate(x, y):
return sin(x)**3 + y

在我的用例中,我经常调用函数,但主要是偶尔更改y和x一次。由于我的函数计算量很大,我想加快它的速度。当然,我可以重组完整的代码,这样就不会多次计算任何内容,但增加的速度并不能证明增加的复杂性是合理的。

我记得确实有这样的东西,但我记不清它是什么了(可能是functools或某种装饰器?(。

functools中的缓存装饰器非常适合此功能。缓存机制也称为内存化。

缓存的实现非常简单。把它想象成一个字典,其中的键是根据传递给函数的参数构造的。除非函数实现中涉及某种随机组件,否则每次返回值都是相同的。

这意味着通过简单地查找";键";,可以在不实际执行函数代码的情况下推导返回值。

因此:

from functools import cache
from math import sin
@cache
def calculate(x, y):
return sin(x)**3 + y

不过,不要试图对每个函数都使用这个装饰器。考虑一下:

@cache
def calculate(x, y):
return x + y

当然,这是有效的但是在缓存实现方面有一个小的开销,在这种特殊情况下,这意味着使用缓存实际上会减慢的响应速度

为了节省时间和计算能力,我建议您使用functools模块

functools模块是python中的cache module,它使您能够缓存函数的结果。

cache是一个装饰器,它有助于使用记忆技术减少相同输入的函数执行。

from functools import cache
@cache
def calculate(x, y):
return sin(x)**3 + y

最新更新