On Thu, Dec 2, 2021 at 1:21 AM Paul Moore <p.f.mo...@gmail.com> wrote:
>
> On Wed, 1 Dec 2021 at 06:19, Chris Angelico <ros...@gmail.com> wrote:
> > 3) If "yes" to question 1, would you use it for any/all of (a) mutable
> > defaults, (b) referencing things that might have changed, (c)
> > referencing other arguments, (d) something else?
>
> N/A, except to say that when you enumerate the use cases like this,
> none of them even tempt me to use this feature.

I'm just listing some of the common use-cases, not all of them.

> I think that the only
> thing I might use it for is to make it easier to annotate defaults (as
> f(a: list[int] => []) rather than as f(a: list[int] | None = None).

That's exactly the goal! It's hugely simpler to say "this is always a
list, and defaults to a new empty list" than "this is a list or None,
defaults to None, and hey, if it's None, I'll make a new empty list".

> So I'll revise my answer to (1) and say that I *might* use this, but
> only in a way it wasn't intended to be used in, and mostly because I
> hate how verbose it is to express optional arguments in type
> annotations. (And the fact that the annotation exposes the sentinel
> value, even when you want it to be opaque). I hope I don't succumb and
> do that, though ;-)

That's definitely an intended use-case ("mutable defaults" above);
you're focusing on the fact that it improves the annotations, I'm
focusing on the fact that it improves documentation and introspection,
but it's all the same improvement :)

> > 5) Do you know how to compile CPython from source, and would you be
> > willing to try this out? Please? :)
>
> Sorry, I really don't have time to, in the foreseeable future. If I
> did have time, one thing I would experiment with is how this interacts
> with typing and tools like pyright and mypy (yes, I know type checkers
> would need updating for the new syntax, so that would mostly be a
> thought experiment) - as I say, I'd expect to annotate a function with
> an optional list argument defaulting to an empty list as f(a:
> list[int] => []), which means that __annotations__ needs to
> distinguish between this case and f(a: list[int]) with no default.

No problem, yup.

> Sorry, I don't have any feedback like that. What I can say, though, is
> I'd find it quite hard to express the question, in the sense that I'd
> struggle to explain the difference between early and late bound
> parameters to a non-expert, much less explain why we need both. I'd
> probably just say "it's short for a default of None and a check" which
> doesn't really capture the point...

The point is that it's a shortcut for "omitted" rather than "a default
of None", but there are many ways to explain it, and I only have one
brother who knows enough Python to be able to talk to about this (and
I got feedback from him VERY early).

> > Any and all comments welcomed. I mean, this is python-ideas after
> > all... bikeshedding is what we do best!
>
> I hope this was useful feedback.

It was. Thank you.

ChrisA
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/H4VA7EM6YA7WFISGVZ4NJV5N7DQAKYR3/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to