On 18/02/2023 17:19, Albert-Jan Roskam wrote:


On Feb 18, 2023 17:28, Rob Cliffe via Python-list <python-list@python.org> wrote:

    On 18/02/2023 15:29, Thomas Passin wrote:
    > On 2/18/2023 5:38 AM, Albert-Jan Roskam wrote:
    >>     I sometimes use this trick, which I learnt from a book by
    Martelli.
    >>     Instead of try/except, membership testing with "in"
    >> (__contains__) might
    >>     be faster. Probably "depends". Matter of measuring.
    >>     def somefunc(arg, _cache={}):
    >>         if len(_cache) > 10 ** 5:
    >>             _cache.pop()
    >>         try:
    >>             return _cache[arg]
    >>         except KeyError:
    >>             result = expensivefunc(arg)
    >>             _cache[arg] = result
    >>             return result
    >>     Albert-Jan
    >
    > _cache.get(arg) should be a little faster and use slightly fewer
    > resources than the try/except.
    >
    Provided that you can provide a default value to get() which will
    never
    be a genuine "result".


=====

This might be better than None:
_cache.get(arg, Ellipsis)


A common strategy is to have a dedicated sentinel object.  E.g. (untested):
IMPOSSIBLE_RESULT = object()
...
        if _cache.get(arg, IMPOSSIBLE_RESULT) == IMPOSSIBLE_RESULT:
            # arg was not in the cache
            ...
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to