Easier way to save result of a function?
Alex Martelli
aleax at mac.com
Wed Jul 5 10:38:03 EDT 2006
Ant <antroy at gmail.com> wrote:
> > Thanks, that's awesome! Definitely not something I'd have ever been able
> > to work out myself - I think I need to learn more about nested functions
> > and introspection.
>
> I've recently found nested functions incredibly useful in many places
> in my code, particularly as a way of producing functions that are
> pre-set with some initialization data. I've written a bit about it
> here: http://antroy.blogspot.com/ (the entry about Partial Functions)
>
> > > def memoizeMethod(cls, n, m):
> > > def decorated(self):
> > > if n in self._memo: return self._memo[n]
> > > result = self._memo[n] = m(self)
> > > return result
> > > decorated.__name__ = n
> > > setattr(cls, n, decorated)
>
> Couldn't this be more simply written as:
>
> def memoizeMethod(cls, n, m):
> def decorated(self):
> if not n in self._memo:
> self._memo[n] = m(self)
> return self._memo[n]
> decorated.__name__ = n
> setattr(cls, n, decorated)
Yes, at a tiny performance cost (probably hard to measure), though I
would spell the guard "if n not in self._memo:" :-).
> I've not seen the use of chained = statements before. Presumably it
> sets all variables to the value of the last one?
It sets all ``variables'' ("left-hand sides", LHS) to the right-hand
side (RHS) value; here, it lets you avoid an extra indexing in order to
obtain the value to return (a tiny cost, to be sure).
Alex
More information about the Python-list
mailing list