2014-09-19 57 views
-7

在這個函數中我需要做的是創建一個本地表,並在函數中查找表並存儲結果(如果需要計算)。這應該適用於任何函數,只要它只用可哈希參數調用即可。確保您支持任意數量的位置和關鍵字參數。 (我們不能使用全局表)Python:創建一個函數裝飾器,用於記憶一個函數

這將像使用:

@memoize 
def fib(n): 
    if n > 1: 
     return fib(n-1) + fib(n-2) 
    else: 
     return n 

有人能告訴我一些提示>?

+3

這是裝飾者的標準例子之一,你甚至打擾做任何研究? – 2014-09-19 19:28:07

+1

[你試過谷歌嗎?](https://www.google.com/search?q=python+memoization+decorator) – user2357112 2014-09-19 19:28:17

+2

兩秒鐘的谷歌搜索給出了https://wiki.python.org/moin/PythonDecoratorLibrary#Memoize 。你說你做了多少研究? – 2014-09-19 19:28:59

回答

0
def memoize(f): 
    local_table = create_a_local_table() 
    @functools.wraps 
    def wrapper(*args, **kwargs): 
     assert isinstance(len(args), numbers.Number) 
     assert isinstance(len(kwargs), numbers.Number) 
     return lookup_into_the_table_and_store_of_the_result_if_it_needs_to_be_computed(*args, **kwargs) 
    return wrapper 

實現這兩個功能是作爲讀者的練習。請注意,第二個必須是memoize內的本地函數,除非您以其他方式訪問local_table

另請注意,您的問題的一些直接翻譯是不必要的。