Вы можете воспользоваться моим простым решением проблемы. Это действительно просто, ничего особенного:
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]
Ему действительно не хватает функциональности по истечении срока действия, но вы можете легко расширить его, указав конкретное правило в MemCache c-tor.
Код Hope достаточно понятен, но если нет, просто упомяну, что в этот кеш передается функция перевода в качестве одного из параметров c-tor. Он, в свою очередь, используется для создания кэшированного вывода относительно ввода.
Надеюсь, поможет
item
вашего примера.