I think the "if unset" behavior is well handled by collections.ChainMap. But I do think that fact should be prominent in any documentation of the new dict Union operator.

On Wed, Feb 26, 2020, 11:06 AM Guido van Rossum <guido@python.org> wrote:
On Wed, Feb 26, 2020 at 7:43 AM Claudio Jolowicz <cjolowicz@gmail.com> wrote:
In my experience, the expression `value |= other` is a common idiom across
programming languages to provide a default for `value` if it is "unset". For a
container-type, I would expect this operation, informally spoken, to be applied
element-wise. In other words, the resulting dict would have the union of keys,
with values supplied from `other` only if keys are missing in `value`.

This would allow users to provide defaults in a dictionary of settings, like
this:

    settings |= defaults

As this usage generalizes a (perceived) common idiom, I would expect people to
get bitten by this.

Interesting. Can you point to specific examples of this? In what other languages have you seen this? (Not that it would make us change PEP 584, but if this appears common we could probably warn about it prominently in docs and tutorials.)

The pattern I'm familiar with for applying defaults always starts with the defaults and then adds the local overrides, so the PEP 584 behavior fits perfectly. (Probably because in Python before PEP 584 the most common operation is dict.update(), which has the same semantics.)

--
--Guido van Rossum (python.org/~guido)
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-leave@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/JHXN342STNGSPX3NRAEXRS6JOXH5BCNU/
Code of Conduct: http://python.org/psf/codeofconduct/