On Fri, Dec 3, 2021 at 6:24 AM Brendan Barnwell <brenb...@brenbarn.net> wrote:
>         What I'm saying is that I want that "thing" to exist.  At the time the
> function is defined, I want there to be a Python object which represents
> the behavior to be activated at call time if the argument is not passed.
>   In the current proposal there is no such "thing".  The function just
> has behavior melded with its body that does stuff, but there is no
> addressable "thing" where you can say "if you call the function and the
> argument isn't passed were are going to take this
> default-object-whatchamacallit and 'use' it (in some defined way) to get
> the default value".  This is what we already have for early-bound
> defaults in the function's `__defaults__` attribute.
>

What would you do with this object? Suppose you have this function:

def f(lst=>[], n=>len(lst)):
    ...

What can you usefully do with this hypothetical object representing
the default for n? There is no "thing" and no way you could "use" that
thing to predict the value of n without first knowing the full context
of the function.

With early-bound defaults, you can meaningfully inspect them and see
what the value is going to be. With late-bound defaults, should the
default for lst be an empty list? Should the default for n be 0?
Neither is truly correct (but they're wrong in different ways).

Do you actually need that object for anything, or is it simply for the
sake of arbitrary consistency ("we have objects for early-bound
defaults, why can't we have objects for late-bound defaults")?

The value that will be assigned to the parameter does not exist until
the function is actually called, and may depend on all kinds of things
about the function and its context. Until then, there is no value, no
object, that can represent it.

I put to you the same question I put to David Mertz: how is a
late-bound default different from half of a conditional expression?

def f(*args):
    lst = args[0] if len(args) > 0 else []
    n = args[1] if len(args) > 1 else len(lst)
    ...

Do the expressions "[]" and "len(lst)" have to have object
representations in this form? If not, why should they need object
representations when written in the more natural way as "lst=>[]"?

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

Reply via email to