On Wed, Oct 27, 2021 at 3:39 AM Erik Demaine <edema...@mit.edu> wrote:
>
> On Tue, 26 Oct 2021, Steven D'Aprano wrote:
>
> >    def func(x=x, y=>x)  # or func(x=x, @y=x)
>
> This makes me think of a "real" use-case for assigning all early-bound
> defaults before late-bound defaults: consider using closure hacks (my main use
> of early-bound defaults) together with late-bound defaults, as in
>
> ```
> for i in range(n):
>      def func(arg := expensive(i), i = i):
>          ...
> ```
>
> I think it's pretty common to put closure hacks at the end, so they don't get
> in the way of the caller.  (The intent is that the caller never specifies
> those arguments.)  But then it'd be nice to be able to use those variables in
> the late-bound defaults.
>
> I can't say this is beautiful code, but it is an application and would
> probably be convenient.

Got any realistic examples? Seems very hackish to me.

> Perhaps most natural is to add a new introspection object, say LateDefault,
> that can take place as a default value (but can't be used as an early-bound
> default?), and has a __code__ attribute.
>

Yeah, I'll have to play with this. It may be necessary to wrap *both*
types of default such that you can distinguish them. Effectively,
instead of a tuple of values, you'd have a tuple of defaults, each one
stating whether it's a value or a code block.

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/DZVDQKPWDBBOTZ4ARLBNIS5NGSY7N2FK/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to