On Thu, Dec 2, 2021 at 8:40 PM Steven D'Aprano <st...@pearwood.info> 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.

> Or even as a plain old string. All of which are first-class objects.

For documentation purposes, it is indeed available as a plain old
string. In colloquial terms, it is the source code for the expression,
although technically it's reconstructed from the AST. ( This is
approximately as accurate as saying that the repr of an object is its
source code. Possibly more accurate, actually.)

> Or it might be
> that the default expression will be compiled into the body of the
> function, where is it effectively invisible. So I guess that's a third
> change: when, how often, and the difference to introspection.

Among our changes are when, how often, the difference to
introspection, and the ability to externally manipulate the defaults.
And nice red uniforms.

Although the ability to manipulate them could be considered part of
introspection, not sure.

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
>>>

(It's an implementation detail and not part of the specification, but
if CPython adopts this behaviour, it will become de facto part of the
expected behaviour, and someone somewhere will use this deliberately.)

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

Reply via email to