[Python-ideas] caching properties
Steven D'Aprano
steve at pearwood.info
Fri May 1 04:45:17 CEST 2009
On Fri, 1 May 2009 06:59:55 am Jared Grubb wrote:
> On 30 Apr 2009, at 12:22, Scott David Daniels wrote:
> > This is slightly better (name change as in Antoine Pitrou's
> > comment):
> >
> > class cached(object):
> >
> > def __init__(self, function):
> > self._function = function
> > self._cache = {}
> >
> > def __call__(self, *args):
> > try:
> > return self._cache[args]
> > except KeyError:
> > self._cache[args] = self._function(*args)
> > return self._cache[args]
> >
> > def expire(self, *args):
> > del self._cache[args]
>
> The only thing I dislike is how many dictionary lookups are required
> in order to return the value after it's been cached. I count 4
> lookups (object.prop, prop.__call__, self._cache, and
> self._cache[args]). These add up, especially if object.prop could
> have returned the value immediately without having to go through so
> much indirection (but this is not currently possible)
But you shouldn't be comparing a cheap attribute requiring one key
lookup to a cache requiring four lookups. You should be comparing an
expensive function call to four lookups. If the function isn't
expensive, there's no value in caching it.
--
Steven D'Aprano
More information about the Python-ideas
mailing list