On Thu, May 28, 2020 at 9:01 AM Greg Ewing <greg.ewing@canterbury.ac.nz> wrote:
On 28/05/20 12:38 pm, Rob Cliffe wrote:
> why not go
> further (as the OP suggested as far as I recall)
> and allow the more concise
>
>      def order(eggs = 4, spam ?= Spam()):
>          etc.

That clutters up the header with things that are not part of
the function's signature. All the caller needs to know is that
the spam argument is optional.

I'm very surprised by this sentiment. The signature says that the default value for spam is an instance of Spam, namely one constructed with no arguments. That's useful information! I wrote a long post about this here: https://mail.python.org/archives/list/python-ideas@python.org/message/6TGESU6AQSDFLIV2UBHAB4E2NVVREVPA/ - do you have any thoughts on that?

(side note - I'm just seeing now how mailman handles inline images, which is very disappointing)

The fact that a new Spam object
is created on each call if he doesn't supply one is an
implementation detail.

I don't think it is - knowing that the default isn't shared across calls could be quite important. But aside from that, there's only one character (`?`) which represents that detail, and that's an acceptable amount of 'clutter'. The rest (`=Spam()`) is just saying what the default value is, and we don't usually consider that clutter.