Raymond Hettinger <raymond.hettin...@gmail.com> added the comment:

Possible replacement recipes:

-- Implement as a class -----------------

class LRU:

    def __init__(self, func, maxsize=128):
        self.func = func
        self.d = OrderedDict()

    def __call__(self, *args):
        if args in self.d:
            value = self.d[args]
            self.d.move_to_end(args)
            return value
        value = self.func(*args)
        if len(self.d) >= self.maxsize:
            self.d.popitem(False)
        self.d[args] = value
        return value

-- Implement as a closure ---------------

def lru_cache(maxsize):
    def deco(func):
        d = OrderedDict()
        def inner(*args):
            if args in d:
                d.move_to_end(args)
                return d[args]
            answer = func(args)
            d[args] = answer
            if len(d) > maxsize:
                d.popitem(False)
            return answer
        return inner
    return deco

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue44782>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to