2016-01-05 56 views
0

我想使用klepto作爲一個緩存,散列參數和函數名稱,這可能嗎?使用klepto來緩存的函數名稱和參數

例如所以使用dir_cache我將能夠

@inf_cache(cache=dir_archive(cached=False)) 
def func1(x, y): 
    return x + y 

@inf_cache(cache=dir_archive(cached=False)) 
def func2(x, y): 
    return x - y 

,並FUNC1兩個通話(1,2)和FUNC2(1,2)將導致不同的鍵在dir_archive

我這麼想嗎?

+0

我是'klepto'作者。我不清楚你在找什麼。你想同時使用'func1'和'func2'來緩存相同的'dir_archive' ...但是每個函數的「子緩存」保持不同?如果是這種情況,爲什麼不使用兩個不同的目錄?基本上,'。/ func1'目錄中的緩存函數'func1'和'。/ func2'中的函數'func2'?所有你需要添加的是第一個'dir_archive'的'name ='func1''和第二個'name ='func2''。 –

+0

你好,我正在尋找cahe的關鍵功能部分的名稱,以及參數。然後,我可以使用相同的存檔而不使用名稱。 – chris

回答

0

雖然可能不是一個完全可靠的解決方案,但這似乎是在某個級別上做你想要的。

>>> import klepto 
>>> @klepto.inf_cache(cache=klepto.archives.dir_archive(cached=False)) 
... def func1(x, y, name='func1'): 
... return x+y 
... 
>>> @klepto.inf_cache(cache=klepto.archives.dir_archive(cached=False)) 
... def func2(x, y, name='func2'): 
... return x-y 
... 
>>> 
>>> func1(1,2) 
3 
>>> func1(1,3) 
4 
>>> func2(2,4) 
-2 
>>> func2(1,2) 
-1 
>>> func1.__cache__() 
dir_archive('memo', {-8532897055064740991: 4, -8532897055063328358: 3, -960590732667544693: -1, -3289964007849195004: -2}, cached=False) 
>>> 
>>> func1(1,2)   
3 
>>> func1(1,2) 
3 
>>> func2(1,2) 
-1 
>>> 
>>> func1.__cache__() == func2.__cache__() 
True 

你會注意到,dir_archive是一樣的,和功能似乎都使用單獨的緩存。一個問題是,您可以通過'name'來覆蓋默認設置,並輕鬆搞定。我猜你可以做一些更強大的,如果需要與另一個裝飾,以防止用戶更改'name'關鍵字。