我尝试使用foo(dti: DatetimeIndex)
注释记住方法@functools.lru_cache()
。但是,它抱怨TypeError: unhashable type: 'DatetimeIndex'
。
由于DatetimeIndex
对象是不可变的,因此应该有一种很好的方法将它们用作记忆的关键,对吧?
另外,DatetimeIndex
定义哈希方法只返回其id()
会出现什么问题?
答案 0 :(得分:0)
我最后编写了自己的装饰器,以便能够记住接受DataFrame
个对象(或Hashable
个对象的方法,以防DataFrame
s将来可以使用),它看起来像这样:
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):
...