On Wed, Oct 27, 2021 at 5:05 AM Paul Moore <p.f.mo...@gmail.com> wrote:
>
> On Tue, 26 Oct 2021 at 16:48, Eric V. Smith <e...@trueblade.com> wrote:
> >
> > And also the "No Loss of Abilities If Removed" section sort of applies
> > to late-bound function arguments: there's nothing proposed that can't
> > currently be done in existing Python. I'll grant you that they might
> > (might!) be more newbie-friendly, but I think the bar is high for
> > proposals that make existing things doable in a different way, as
> > opposed to proposals that add new expressiveness to the language.
>
> One issue with not having an introspection capability, which has been
> bothering me but I've not yet had the time to come up with a complete
> example, is the fact that with this new feature, you have functions
> where there's no way to express "just use the default" without knowing
> what the default actually *is*.
>
> Take for example
>
> def f(a, b=None):
>     if b is None:
>         b = len(a)
>     ...
>
> def g(a, b=>len(a)):
>     ...
>
> Suppose you want to call f as follows:
>
> args = [
>     ([1,2,3], 2),
>     ([4,5,6], None),
>     ([7,8,9], 4),
> ]
>
> for a, b in args:
>     f(a, b)
>
> That works fine. But you cannot replace f by g, because None doesn't
> mean "use the default", and in fact by design there's *nothing* that
> means "use the default" other than "know what the default is and
> supply it explicitly". So if you want to do something similar with g
> (allowing the use of None in the list of tuples to mean "use the
> default"), you need to be able to introspect g to know what the
> default is. You may also need to manipulate first-class "deferred
> expression" objects as well, just to have something you can return as
> the default value (you could return a string and require the user to
> eval it, I guess, but that doesn't seem particularly user-friendly...)
>
> I don't have a good solution for this, unfortunately. And maybe it's
> something where a "good enough" solution would be sufficient. But
> definitely, it should be discussed in the PEP so what's being proposed
> is clear.
>

Wouldn't cases like this be most likely to use *args and/or **kwargs?
Simply omitting the argument from those would mean "use the default".
Or am I misunderstanding your example here?

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

Reply via email to