我想缓存一个将列表作为参数的函数,但是当我尝试使用 functools.lru_cache
装饰器这样做时,它失败了 TypeError: unhashable type: 'list'
。
import functools
@functools.lru_cache()
def example_func(lst):
return sum(lst) + max(lst) + min(lst)
print(example_func([1, 2]))
原文由 redfast00 发布,翻译遵循 CC BY-SA 4.0 许可协议
这失败了,因为列表是不可散列的。这将使 Python 很难知道缓存了哪些值。解决此问题的一种方法是在将列表传递给缓存函数之前将列表转换为元组:由于元组不可变且可散列,因此可以缓存它们。
长话短说
使用元组而不是列表: