2014-10-03 29 views
4

要添加記憶化到在Python函數,所述functools.lru_cache()裝飾可以使用:如何爲functools.lru_cache創建備忘錄的別名?

import functools 

@functools.lru_cache(maxsize=None) 
def my_func(): 
    ... 

然而,我想定義以下別名於上述用途的functools.lru_cache()使代碼更易讀:

@memoize 
def my_func(): 
    ... 

我的問題是:如何定義這樣一個別名?下面這段代碼不起作用:

memoize = functools.partial(functools.lru_cache, maxsize=None) 

回答

7

你不需要functools.partial,因爲它已經設置採取兩個呼叫。只需撥打一次:

memoize = functools.lru_cache(maxsize=None) 

然後使用別名作爲一個裝飾:

@memoize 
def my_func(): 
    ... 
+1

剛想給類似的反應。爲了使問題中的代碼正常工作,你需要_call_'memoize':@memoize()... – 2014-10-03 17:39:16

+0

謝謝你的回答和關於'@memoize()'的提示! – s3rvac 2014-10-03 17:49:15