我正在尝试使用@functools.lru_cache()注解来记住一个方法foo(dti: DatetimeIndex)。然而,它向TypeError: unhashable type: 'DatetimeIndex'抱怨。
既然DatetimeIndex对象是不可变的,那么应该有一种很好的方法来将它们用作memoization的键,对吧?
另外,如果DatetimeIndex定义一个哈希方法来简单地返回它的id(),那又有什么错呢
发布于 2017-06-01 06:00:17
我最终编写了自己的装饰器,以便能够记忆接受DataFrame对象(或Hashable对象,以防DataFrame将来变得可哈希)的方法,它看起来如下所示:
def my_memoize(func):
# TODO use an LRU cache so we don't grow forever
cache = {}
def decorating_function(self, arg):
key = arg if isinstance(arg, collections.Hashable) else id(arg)
key = (self, key)
if key in cache:
return cache[key]
value = func(self, arg)
cache[key] = value
return value
return decorating_function我这样使用它:
@my_memoize
def calculate_stuff(self, df):
...https://stackoverflow.com/questions/44053963
复制相似问题