Rev 3098 | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 30-Aug-2011@author: rajveer'''import timeclass memoized(object):'''Simple caching for function returns.Any function return can be memoized for a given time duration.Time to live also need to be mentioned. It is represented as number of seconds'''def __init__(self, ttl):self.cache = {}self.ttl = ttldef __call__(self, func):def wrapped_function(*args):try:now = time.time()value, last_update = self.cache[args]if now - last_update > self.ttl:print "EXPIRED"raise AttributeErrorprint "HIT"except KeyError:print "MISS"value = func(*args)self.cache[args] = value, nowexcept AttributeError:value = func(*args)self.cache[args] = value, nowexcept TypeError:print "MISS"return func(*args)return valuereturn wrapped_functiondef __repr__(self):return self.func.__doc__'''Example usage'''@memoized(0)def fibonacci(n):if n <= 1:return nreturn fibonacci(n-2) + fibonacci(n-1)def main():print fibonacci(10)print fibonacci(12)if __name__ == '__main__':main()