如何配置lru_cache
根据接收到的实际值为其缓存设置密钥,而不是如何调用函数
>>> from functools import lru_cache
>>> @lru_cache
... def f(x=2):
... print("reticulating splines...")
... return x ** 2
...
>>> f()
reticulating splines...
4
>>> f(2)
reticulating splines...
4
>>> f(x=2)
reticulating splines...
4
换句话说,只有上面的第一个调用应该是缓存未命中,其他两个应该是缓存命中
要做到这一点,您必须经历将参数绑定到形式参数的过程。在C代码中实现的实际过程没有公共接口,但是在^{} 中有一个(慢得多的)重新实现。这比通常使用
functools.lru_cache
慢约100倍:如果该方法的性能损失太大,您可以改为使用以下技巧,这需要更多的代码复制,但运行速度要快得多,仅比通常使用
lru_cache
慢2倍左右(有时使用关键字参数时速度要快):这使用了更快的C级参数绑定来规范化对已记忆助手函数的调用,但需要复制函数的参数3次:一次在外部函数的签名中,一次在助手的签名中,一次在对助手的调用中
相关问题 更多 >
编程相关推荐