2014-09-19 56 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

另请注意,您的问题的一些直接翻译是不必要的。