Frank Millman wrote: > On 23/02/2013 12:13, Frank Millman wrote: >> Hi all >> >> I use a dictionary as a cache, and I thought that I could replace it >> with collections.defaultdict, but it does not work the way I expected >> (python 3.3.0). > > > [...] >> >> from collections import defaultdict >> my_cache = defaultdict(fetch_object) >> my_obj = my_cache['a'] >> >> It does not work, because fetch_object() is called without any arguments. > > Thanks, Chris and Peter. Some nice ideas to choose from :-) > > Frank
Oh, I overlooked that you are using Python 3. For that there's also functools.lru_cache. Example: >>> from functools import lru_cache >>> @lru_cache(maxsize=None) ... def fetch_object(id): ... print("fetching #{}".format(id)) ... return id*id # bogus example ... >>> fetch_object(42) fetching #42 1764 >>> fetch_object(42) 1764 >>> fetch_object(10) fetching #10 100 -- http://mail.python.org/mailman/listinfo/python-list