Я возился с мемоизацией в Python и использовал в качестве модели пример функции последовательности Фибоначчи. Я написал первую функцию fibonacci() как обычную функцию без мемоизации, и она работает как положено. Затем я написал свою функцию fibonacci_memo(), которая использовала мемоизацию с использованием словаря входных и выходных данных, и она работала, как и ожидалось. Затем я захотел протестировать декоратор кэша functools, чтобы увидеть, достиг ли он того же эффекта, которого я ожидал. Итак, я скопировал исходную функцию fibonacci(), которая не использовала мемоизацию, и добавил к ней декоратор @cache. Результат был неожиданным, однако, похоже, он работает так же, как и исходная функция fibonacci(), которая не использовала мемоизацию.
Могу ли я неправильно понять полезность декоратора? или мемоизация вообще? Код приведен ниже, любая помощь приветствуется!
from functools import cache
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(23))
# instant, works as expected
def fibonacci_memo(n, memo:dict={}):
if n == 0:
return 0
elif n == 1:
return 1
if n in memo:
return memo[n]
memo[n] = fibonacci_memo(n - 1, memo) + fibonacci_memo(n - 2, memo)
return fibonacci_memo(n - 1, memo) + fibonacci_memo(n - 2, memo)
print(fibonacci_memo(500))
# instant, works as expected
@cache
def fibonacci_functools(n): # identical to first, basic fibonacci function
if n == 0:
return 0
elif n == 1:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci_functools(500))
# slow, shouldn't it be te same as fibonacci_memo()??
Подробнее здесь: https://stackoverflow.com/questions/788 ... e-function
Почему декоратор functools.cache не работает с моей функцией последовательности Фибоначчи с запоминанием? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение