有些小脚本里会写递归,或者一个纯函数会被同样参数调用很多次。数据量不大时,标准库的 functools.cache 就能少算不少重复活。
环境:Python 3.9+。保存成 cache-demo.py:
from functools import cache
@cache
def fib(n: int) -> int:
print('calc', n)
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
print(fib(6))
print(fib(6))
print(fib.cache_info())
跑一下:
python cache-demo.py
第二次 fib(6) 不会重新展开递归,结果直接从缓存里拿。
这个更适合参数可哈希、结果不会随外部状态变化的小函数。要是缓存可能无限长,或者需要过期时间,那就别硬用它了。