Você pode usar minha solução simples para o problema. É realmente simples, nada sofisticado:
class MemCache(dict):
def __init__(self, fn):
dict.__init__(self)
self.__fn = fn
def __getitem__(self, item):
if item not in self:
dict.__setitem__(self, item, self.__fn(item))
return dict.__getitem__(self, item)
mc = MemCache(lambda x: x*x)
for x in xrange(10):
print mc[x]
for x in xrange(10):
print mc[x]
Na verdade, falta funcionalidade de expiração, mas você pode estendê-la facilmente especificando uma regra específica no c-tor do MemCache.
O código de esperança é auto-explicativo suficiente, mas, se não, apenas para mencionar, esse cache está sendo transmitido para uma função de tradução como um de seus parâmetros c-tor. Por sua vez, é usado para gerar saída em cache referente à entrada.
Espero que ajude
item
no seu exemplo.