[Python-Dev] Re: PEP 318 bake-off?

Josiah Carlson jcarlson at uci.edu
Sat Apr 3 19:37:55 EST 2004


> ##########
> #
> # Decorations
> #
> class Memoized(dict):
>     """ A function wrapper to cache the results of functions that take a long
>         time to complete, like database querries or intensive mathematical
>         computations.
> 
>         To wipe the cache, just call m.clear()
>     """
>     def __init__(self, func, init={}):
>         """ Accepts the function to be memoized and an optional initial 
>             dictionary of known results.
>         """
>         dict.__init__(self, init)
>         self.func = func
> 
>     def __call__(self, *args, **kwds):
>         key = (args, tuple(kwds.items())) # hope everything's hashable...
>         return ( self.get(key)
>                  or self.setdefault(key, self.func(*args, **kwds)) )

I believe that with standard dictionaries, kwds is not guaraneed to have
any particular order.  Perhaps sorting kwds.items() makes sense?

 - Josiah




More information about the Python-Dev mailing list