优化memoization装饰器以不增加调用堆栈

时间:2012-09-19 21:36:35

标签: python python-3.x

我有一个非常非常基本的memoization装饰器,我需要在下面进行优化:

def memoize(function):
    memos = {}
    def wrapper(*args):
        try:
            return memos[args]
        except KeyError:
            pass
        result = function(*args)
        memos[args] = result
        return result
    return wrapper

目标是使其不会添加到调用堆栈。它现在实际上是两倍。我意识到我可以将它嵌入到函数的基础上,但这并不是我所希望的,因为我想要一个全局的memoizing解决方案。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

如果您使用的是Python 3.2,则可以使用标准库:

import functools

@functools.lru_cache(maxsize=None)
def doit(...):
    ...

它很容易记住并且是标准库的一部分。