【发布时间】:2020-10-02 19:17:54
【问题描述】:
我有一个将(以及其他)字典作为参数的方法。该方法是解析字符串,字典提供了一些子字符串的替换,所以它不必是可变的。
这个函数经常被调用,而且在冗余元素上,所以我认为缓存它会提高它的效率。
但是,正如您可能已经猜到的那样,由于dict 是可变的,因此不可散列,@functools.lru_cache 无法修饰我的函数。那么我该如何克服呢?
如果它只需要标准库类和方法,则加分。理想情况下,如果它在标准库中存在某种我没见过的frozendict,那会让我很开心。
PS:namedtuple 只能在万不得已的情况下使用,因为它需要大量的语法转换。
【问题讨论】:
-
我没有看到这个,但它并没有真正的帮助。从头开始编写缓存装饰器不值得在这里付出努力,我想坚持使用标准库。还是谢谢你:)
-
如何继承
namedtuple并通过x["key"]添加访问权限?这可能只是几行代码。 -
我知道获取命名元组的唯一方法是调用工厂
collections.namedtuple,它返回一个type,所以如果我想将一个__getitem__添加到一个命名元组中,我会拥有动态地做到这一点,这是不可能的,即使它真的很丑陋。还有其他方法吗? -
@Evpok:只需子类化
namedtuple()返回的类型:class X(namedtuple("Y", "a b c")): ...。
标签: python dictionary python-3.x hashable