Re: Memoization and encapsulation
- From: Just <just@xxxxxxxxx>
- Date: Sat, 31 Dec 2005 09:23:05 +0100
In article <pan.2005.12.31.04.23.25.584823@xxxxxxxxxxxxxxxxxxxxxx>,
Steven D'Aprano <steve@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> I was playing around with simple memoization and came up with something
> like this:
>
> _cache = {}
> def func(x):
> global _cache
There's no need to declare _cache as global, since you're not assigning
to it. So this global isn't all that pesky after all...
> if _cache.has_key(x):
> return _cache[x]
> else:
> result = x+1 # or a time consuming calculation...
> _cache[x] = result
> return result
>
> when it hit me if I could somehow bind the cache to the function, I could
> get rid of that pesky global variable.
[ ... ]
> What do folks think? Is there a better way?
I actually prefer such a global variable to the default arg trick. The
idiom I generally use is:
_cache = {}
def func(x):
result = _cache.get(x)
if result is None:
result = x + 1 # or a time consuming calculation...
_cache[x] = result
return result
Just
.
- Follow-Ups:
- Re: Memoization and encapsulation
- From: Steven D'Aprano
- Re: Memoization and encapsulation
- From: skip
- Re: Memoization and encapsulation
- References:
- Memoization and encapsulation
- From: Steven D'Aprano
- Memoization and encapsulation
- Prev by Date: Re: python coding contest
- Next by Date: Re: python coding contest
- Previous by thread: Re: Memoization and encapsulation
- Next by thread: Re: Memoization and encapsulation
- Index(es):
Relevant Pages
|