与其使用自定义的可哈希字典,不如使用它,避免重新发明轮子!这是一本冻结的字典,都是可哈希的。
https://pypi.org/project/frozendict/
码:
def freezeargs(func): """Transform mutable dictionnary Into immutable Useful to be compatible with cache """ @functools.wraps(func) def wrapped(*args, **kwargs): args = tuple([frozendict(arg) if isinstance(arg, dict) else arg for arg in args]) kwargs = {k: frozendict(v) if isinstance(v, dict) else v for k, v in kwargs.items()} return func(*args, **kwargs) return wrapped
接着
@freezeargs@lru_cachedef func(...): pass
代码来自@fast_cen的答案
注意:这不适用于递归数据结构;例如,您可能有一个参数列表,该参数是不可哈希的。邀请您进行包装的递归,这样包装就可以深入数据结构并制作每个
dict冻结的
list元组。
(我知道OP不再需要解决方案,但我来这里是寻找相同的解决方案,因此将其留给后代使用)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)