2014-09-19 3 views
-7

Что мне нужно сделать в этой функции, так это создать локальную таблицу и обернуть функцию с помощью поиска в таблицу и сохранить результат, если он необходимо вычислить. Это должно работать с любой функцией, если она вызывается только с аргументами hashable. Убедитесь, что вы поддерживаете любое количество аргументов positional и keyword. (Мы не можем использовать глобальную таблицу)Python: создайте декоратор функции, который memoizes функции

Это будет использоваться как:

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

Может кто-то показать мне некоторые намеки>?

+3

Это один из стандартных образцов декораторов, вы даже делали какие-либо исследования? –

+1

[Вы пытались Google?] (Https://www.google.com/search?q=python+memoization+decorator) – user2357112

+2

Две секунды поискового запроса дают https://wiki.python.org/moin/PythonDecoratorLibrary#Memoize , Сколько исследований вы сказали, что сделали? –

ответ

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.

Также обратите внимание, что некоторые из буквального перевода вашего вопроса не нужны.

Смежные вопросы