On 2020-12-19 at 22:29:34 +0100,
Roel Schroeven <r...@roelschroeven.net> wrote:

> What could be useful in some use cases, I think, is a wrapper function
> that evaluates the function lazily:
> 
>     def dict_get_lazily(d, key, fnc, *args, **kwargs):
>         try:
>             return d[key]
>         except KeyError:
>             return fnc(*args, **kwargs)
> 
>     some_var = dict_get_lazily(d, 'spam', some_function, 31, 11)

There's no need to pass all those arguments through dict_get_lazily, and
the language already has a way to evaluate an expression lazily:

    def dict_get_lazily(d, key, f):
        try:
            return d[key]
        except KeyError:
            return f()

    some_var = dict_get_lazily(d, 'spam', lambda: some_function(31, 11))

So, beyond a cache (of which there are many variations and many
implementations for many use cases), what are the use cases for an
entire dictionary of lazily computed values?  And if my application has
to know when to access d['key'] directly and when to call
dict_get_lazily(d, 'key', f), then whom am I fooling by "hiding" the
lazy evaluation?  But if I always call dict_get_lazily when I access d,
then why do those two or three lines belong in the standard library
instead of my application or my private toolbox?
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to