您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将@ functools.lru_cache与字典参数一起使用

将@ functools.lru_cache与字典参数一起使用

与其使用自定义的可哈希字典,不如使用它,避免重新发明轮子!这是一本冻结的字典,都是可哈希的。

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_cache
def func(...):
    pass

代码来自@fast_cen的答案

注意:这不适用于递归数据结构;例如,您可能有一个参数列表,该参数是不可哈希的。邀请您进行包装的递归,这样包装就可以深入数据结构并制作每个dict冻结的list元组

(我知道OP不再需要解决方案,但我来这里是寻找相同的解决方案,因此将其留给后代使用)

其他 2022/1/1 18:35:20 有447人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶