>Presumably the place where you read about them would have listed some
>example decorators that you can use for memoisation. Here's a quick
>example that works for hashable inputs:
>
Some of these I don't really understand so I am hesitant to use them.
>def memo(func):
> table = {}
> def wrapper(inputarg):
> try:
> return table[inputarg]
> except KeyError:
> table[inputarg] = val = func(inputarg)
> return val
> return wrapper
>
>@memo
>def square(x):
> print('Calling square()')
> return x ** 2
Nice and conscise! I did some profiling and it is fast, too. But as Steven
said, I also need to maximize the cache, among other things. I also gotta
figure out what I'll do with datetime values (probably it's not useful to cache
these).
# 1M function calls
a--115.837 CPU seconds # no memoization
b--215.753 CPU seconds # memodict #
http://code.activestate.com/recipes/578231-probably-the-fastest-memoization-decorator-in-the-/
c--62.547 CPU seconds # simple decorator #
http://code.activestate.com/recipes/577219-minimalistic-memoization/
d--60.771 CPU seconds # Oscar Benjamin, modified to:
def memo(func):
table = {}
def wrapper(*inputarg):
try:
return table[inputarg[0:2]] #
except KeyError:
table[inputarg[0:2]] = val = func(*inputarg)
return val
return wrapper
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor