Python 可哈希的日期时间索引

Python 可哈希的日期时间索引,python,pandas,hash,memoization,datetimeindex,Python,Pandas,Hash,Memoization,Datetimeindex,我试图使用@functools.lru\u cache()注释来记忆一个方法foo(dti:DatetimeIndex)。但是,它抱怨类型错误:不可损坏的类型:“DatetimeIndex” 由于DatetimeIndex对象是不可变的,所以应该有一种很好的方法将它们用作记忆键,对吗 另外,DatetimeIndex定义一个散列方法来简单地返回它的id(),有什么错呢?我最终编写了自己的装饰程序,以便能够记忆接受DataFrame对象的方法(或者Hashable对象,以防DataFrame将来可

我试图使用
@functools.lru\u cache()
注释来记忆一个方法
foo(dti:DatetimeIndex)
。但是,它抱怨类型错误:不可损坏的类型:“DatetimeIndex”

由于
DatetimeIndex
对象是不可变的,所以应该有一种很好的方法将它们用作记忆键,对吗


另外,
DatetimeIndex
定义一个散列方法来简单地返回它的
id()
,有什么错呢?

我最终编写了自己的装饰程序,以便能够记忆接受
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):
    ...

不是“记忆”,而是回忆。看,我想缓存它只是因为计算
foo
很昂贵。就我而言,这是一个本质上昂贵的操作,我几乎无法使它更快。是的,是的,否则我不会寻找解决方案。我不知道你为什么怀疑。例如:假设用户以交互方式输入任意整数,我们希望对每个整数进行素数分解。除非缓存以前分解的输出,否则无法避免重复工作。这种情况是这样的-我不知道我将看到什么
DatetimeIndex
值,但我想避免重做我最近已经完成的工作。不,它需要看到整个
DatetimeIndex
对象。这是整个对象的函数。很抱歉@MaxU,但这已经是我想问的问题了,我真的不明白为什么你认为它定义不清或者不应该问。问题是关于
DatetimeIndex
对象的内存化和散列,而不是我是否可以优化一些没有讨论的其他调用代码。如果解除分配了DatetimeIndex,并且随后在同一内存地址分配了一个新的非等效的,则这将返回错误的结果。将id()用作缓存键的一部分的问题在于,它不能保证具有非重叠生存期的对象的唯一性。