gpt4 book ai didi

python - 什么是 memoization 以及如何在 Python 中使用它?

转载 作者:IT老高 更新时间:2023-10-28 12:05:49 26 4
gpt4 key购买 nike

我刚开始使用 Python,不知道是什么 memoization是以及如何使用它。另外,我可以举一个简化的例子吗?

最佳答案

记忆化实际上是指根据方法输入记住(“记忆化”→“备忘录”→要记住)方法调用的结果,然后返回记住的结果,而不是再次计算结果。您可以将其视为方法结果的缓存。有关详细信息,请参阅第 387 页以了解 Introduction To Algorithms (3e), Cormen 等人中的定义。

在 Python 中使用 memoization 计算阶乘的简单示例如下所示:

factorial_memo = {}
def factorial(k):
if k < 2: return 1
if k not in factorial_memo:
factorial_memo[k] = k * factorial(k-1)
return factorial_memo[k]

你可以再复杂一点,把memoization过程封装成一个类:

class Memoize:
def __init__(self, f):
self.f = f
self.memo = {}
def __call__(self, *args):
if not args in self.memo:
self.memo[args] = self.f(*args)
#Warning: You may wish to do a deepcopy here if returning objects
return self.memo[args]

然后:

def factorial(k):
if k < 2: return 1
return k * factorial(k - 1)

factorial = Memoize(factorial)

Python 2.4 中添加了一个名为“decorators”的功能,现在您只需编写以下代码即可完成相同的操作:

@Memoize
def factorial(k):
if k < 2: return 1
return k * factorial(k - 1)

Python Decorator Library有一个类似的装饰器,叫做 memoized这比此处显示的 Memoize 类更健壮。

关于python - 什么是 memoization 以及如何在 Python 中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1988804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com