Python 中是否有相当于 Java 对象的内存化功能?

Sno*_*pix 0 python memoization

所以我试图在 python fibonacci(n)函数中进行记忆。

def fib(n, memo = [None] * (fibn+1)):
    if memo[n] != None: return memo[n]
    if n <= 2: return 1
    memo[n] = fib(n-1) + fib(n-2)
    return memo[n]
Run Code Online (Sandbox Code Playgroud)

我正在尝试找到一种方法来存储我已经计算出的值的解决方案。我的临时解决方案是创建一个列表memo = [None] * (fibn+1),如果计算出新值:memo[n] = fib(n)。我遇到的问题是列表大部分是空的并且总体效率非常低。我想从此走下去

memo = [None, 1, None, 2, None, None, etc...]

像这样的事情

memo = {
3: 2 
4: 3
7: 13
}
Run Code Online (Sandbox Code Playgroud)

这就像Java中的对象一样。

Bro*_*ark 8

Python 提供了装饰器,可以在模块中自动为您缓存结果functools

from functools import lru_cache

@lru_cache
def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    return fib(n - 1) + fib(n - 2)
Run Code Online (Sandbox Code Playgroud)