2017-07-26 62 views
3

一般問題:如何訪問函數閉包中的變量?訪問lru_cache的緩存

特定問題:如何從包含functools.lru_cache()的Python函數訪問原始cache

如果我memoize的一個功能(例如,從docs截取)...

@lru_cache(maxsize=None) 
def fib(n): 
    if n < 2: 
     return n 
    return fib(n-1) + fib(n-2) 

>>> [fib(n) for n in range(16)] 
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610] 

>>> fib.cache_info() 
CacheInfo(hits=28, misses=16, maxsize=None, currsize=16) 

這裏是cache定義:https://github.com/python/cpython/blob/f0851910eb8e711bf8f22165cb0df33bb27b09d6/Lib/functools.py#L491

fib()被memoized,lru_cache添加cache_info()cache_clear()功能包裝。 cache_clear()有權訪問cache,我有權訪問cache_clear(),所以我可以以某種方式使用它直接訪問cache

+1

它看起來不像你應該能夠做的,它是該函數中的局部變量。你唯一的希望是反思。你爲什麼要這樣做? –

+0

爲什麼?因爲我可以。真的爲什麼?我想在開發過程中在重新啓動之間保持緩存。 – gdw2

+1

你有沒有讀過[this](https://stackoverflow.com/questions/15585493/store-the-cache-to-a-file-functools-lru-cache-in-python-3-2)? – idjaw

回答