On Thu, Dec 02, 2021 at 11:00:33PM +1100, Chris Angelico wrote:
> On Thu, Dec 2, 2021 at 8:40 PM Steven D'Aprano <[email protected]> wrote:
> > Depending on the implementation, you *might* be able to inspect the
> > function and see the default expression as some sort of callable
> > function, or evaluatable code object. (That would be nice.)
>
> Unfortunately not, since the default expression could refer to other
> parameters, or closure variables, or anything else from the context of
> the called function. So you won't be able to externally evaluate it.
Why not? Functions can do all those things: refer to other variables, or
closures, or anything else. You can call functions. Are you sure that
this limitation of the default expression is not just a limitation of
your implementation?
> I'm still unsure whether this is a cool feature or an utter abomination:
>
> >>> def f(x=...):
> ... try: print("You passed x as", x)
> ... except UnboundLocalError: print("You didn't pass x")
> ...
> >>> f.__defaults_extra__ = ("n/a",)
> >>> f(42)
> You passed x as 42
> >>> f()
> You didn't pass x
That is absolutely an abomination. If your implementation has the
side-effect that setting a regular early-bound default to Ellipsis makes
the parameter unable to retrieve the default, then the implementation is
fatally broken.
It absolutely is not a feature.
--
Steve
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/VWZ5SN25QEVVXIYAR43MVRYYTPMANJG3/
Code of Conduct: http://python.org/psf/codeofconduct/