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/