>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 - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor