Python3 传递列表以使用 functools.lru_cache 函数

标签 python python-3.x functools

我想缓存一个将列表作为参数的函数,但是当我尝试使用 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]))

最佳答案

这失败了,因为列表是不可散列的。这将使 Python 很难知道缓存了哪些值。解决此问题的一种方法是在将列表传递给缓存函数之前将列表转换为元组:由于元组不可变且可散列,因此可以缓存它们。

长话短说

使用元组代替列表:

>>> @lru_cache(maxsize=2)
... def my_function(args):
...     pass
...
>>> my_function([1,2,3])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    my_function([1,2,3])
TypeError: unhashable type: 'list'

>>> # TO FIX: use a tuple 

>>> my_function(tuple([1,2,3]))
>>>

关于Python3 传递列表以使用 functools.lru_cache 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49210801/

相关文章:

python - Seaborn:如何将垂直线添加到分布图 (sns.distplot)

python - 如何在 Python 中有效地计算矩阵乘积内存的稀疏值?

python - PyGame中的弹出消息框

python - 对于简单的迷宫游戏,如何使代码更短?

python - 实现前置附加参数的 functools.partial

python - 编写高阶函数的最pythonic方式

python - Pandas 分组加权累计总和

python - 给定数字的最小排列

python - 如何从前一个元素的最后一个字符与最后一个元素的第一个字符相同的列表中提取子列表? - Python

python-3.x - 使用 python3.7 在 ubuntu 16.04 上安装 python functools32 时出错