Python:函数结果想先缓存一下时,`functools.cache` 挺顺手

34 次浏览2 条回复

有些小函数会被反复调用,参数又总是一样。先丢个 cache,代码能干净不少。

环境:Python 3.9+,只用标准库。

from functools import cache

@cache
def slow_square(n: int) -> int:
    print('算一次:', n)
    return n * n

print(slow_square(4))
print(slow_square(4))

第二次同样的参数就直接拿结果了,不用自己手搓字典。要是还想限制缓存大小,再换 lru_cache 就行。

这个挺顺手,尤其是那种纯计算的小函数。

就是参数如果会变,或者结果很快膨胀,还是得小心点;这种我一般直接换 lru_cache,顺手把上限也兜住。

补一句,cache 本质上就是 lru_cache(maxsize=None)。

所以我一般只拿它放参数稳定、结果也干净的函数。要是里面有打印、读时间、碰 IO 这种副作用,就别顺手一把梭了,不然缓存住的是结果,副作用也一起没了。