On 12/16/20 1:44 AM, Chris Angelico wrote:
On Wed, Dec 16, 2020 at 8:43 PM Loris Bennett
<loris.benn...@fu-berlin.de> wrote:

Paul Bryan <pbr...@anode.ca> writes:

On Wed, 2020-12-16 at 10:01 +0100, Loris Bennett wrote:

OK, I get the point about when the default value is generated and
that
potentially being surprising, but in the example originally given,
the
key 'a' exists and has a value of '1', so the default value is not
needed.

But the function is still called. The get method just doesn't use (or
return) the value it generates because the key exists. Nevertheless,
you're passing the return value of the get_default function as an
argument.

Thus, I am still unsurprised when dict.get returns the value of an
existing key.

As am I.

What am I missing?

You'll need to tell me at this point.

I was just slow and confused, but you helped me get there in the end.  I
now realise that issue is not about the result of the dict.get(), but
rather about the fact that the method which generates the default value
is called, whether or not it is needed.

I shall remember that next time I think it might be a good idea to
define a computationally massively expensive value as a rarely needed
default :-)


Yep! That's what defaultdict can do - or if you need more flexibility,
subclass dict and add a __missing__ method.

Or, if the computationally massively expensive call uses potentially
different arguments for each invocation:

    some_var = d.get('a') or cme(arg1, arg2, ...)

--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to