On Thu, Dec 9, 2021 at 12:41 PM MRAB <python@mrabarnett.plus.com> wrote:
On 2021-12-08 23:39, Chris Angelico wrote:
On Thu, Dec 9, 2021 at 10:35 AM Paul Moore <p.f.moore@gmail.com> wrote:
On Wed, 8 Dec 2021 at 23:18, Chris Angelico <rosuav@gmail.com> wrote:
Part of the problem is that it is really REALLY hard to figure out what the actual objections are. I asked, and the one clear answer I got was one subjective opinion that the cognitive load exceeded the benefit. Great! That's one person's concern. I've responded to that by clarifying parts of the cognitive load problem, and that's about as far as that can go.
Um, what parts of my response were unclear? I gave 4 specific points, Brendan gave 4 more (there wasn't much overlap with mine, either).
Multiple people have mentioned that the proposed syntax is confusing. You don't have to respond to everyone individually, and indeed you shouldn't - it's the cumulative effect that matters. Telling 10 people that their concern "is one person's concern" doesn't address the fact that 10 people felt similarly. And honestly, there's only about 10 active participants in this thread, so even 5 people with reservations about the syntax is still "half the people who expressed an opinion".
I have attempted to explain the syntax. What is confusing?
def f(x=spam): ...
def f(x=>spam): ...
I'm not sure what concerns need to be addressed, because I don't understand the concerns. Maybe I'm just getting caught up on all the side threads about "deferreds are better" and "it should be a magical function instead" and I've lost some of the basics? Feel free to repost a simple concern and I will attempt to respond.
[snip]
I haven't been following the thread for some time, but my expectation would be that:
def f(x=>spam): ...
would behave like:
_Missing_ = object()
def f(x=_Missing_): if x is _Missing_: x = spam ...
Yes, broadly so. The differences would be that the signature actually says what the default will be (instead of "<object object at 0xdeadbeef>"), which in turn also means that you can type-check it reliably (for instance, if 'spam' is '[]', then you can show that this argument should always be a list, without having to say "or this specific object"), and there's no need to pollute an outer context with a sentinel value. I prefer to describe it more like: if x was not specified: x = spam even though "was not specified" isn't actually valid Python code. But the nearest equivalent in current code would be a sentinel like that. ChrisA