On 02/12/2021 07:05, Brendan Barnwell wrote:
On 2021-12-01 18:35, Chris Angelico wrote:
In my reference implementation, there is no object that stores it;
it's simply part of the function. A good parallel is the if/else
expression:
x = float("inf") if z == 0 else y/z
Is there an object that represents the if/else expression (or the
deferred "y/z" part)? No, although it could be implemented that way if
you chose:
This is not a good parallel. There is nothing deferred there.
The entire line is evaluated when it is encountered and you get a
result and no part of the if/else expression can ever impact anything
else again unless, via some external control flow, execution returns
and re-executes the entire line. That is not comparable to a function
default, which is STORED and evaluated later independently of the
context in which it was originally written (i.e., the function default
is re-executed but the function definition itself is not re-executed).
The ternary expression vanishes without a trace by the next line,
leaving only its evaluated result. There would be no use in being
able to access some part of it,
It could be useful for debugging.
Best wishes
Rob Cliffe
since the whole (i.e., the ternary expression) is completely finished
by the time you would be able to access it. This is not the case with
a function definition. The function definition leaves behind a
function object, and that function object needs to "know" about the
late-bound default as an independent entity so that it can be
evaluated later. It is bad for the function to store that late-bound
default only in some private format for its exclusive future use
without providing any means for other code to access it as a
first-class value.
_______________________________________________
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/SCO4G5AWQ47W3DGKSN4WLCN7WR3V6XAA/
Code of Conduct: http://python.org/psf/codeofconduct/