On Sun, May 17, 2020 at 07:17:00PM -0000, James Lu wrote:

> Thus, only one of ":=" or "?=" should be adopted. They should be evalued on:

That does not logically follow. Even if we accept your idea that we 
should have special syntax for late-binding of function defaults, and 
that's not clear that we should, it does not follow that the only two 
possible choices are `:=` and `?=`.

They might be your preferred choice, but that doesn't mean that "only 
one of ... should be adopted". We could instead:

- choose something else;
- or choose nothing at all and stick to the status quo.

In any case, we should rule out `:=` of contention, because it already 
has a meaning as the "walrus operator" for assignment expressions, 
which makes it legal in function defaults:

    def func(x=(a:=expression), y=a+1):

This is already valid in 3.8, so we should forget about overloading `:=` 
with a second meaning.


> Do we want to encourage callers to pass None to indicate default 
> arguments?

That isn't up to us, that's up the writer of the function being called. 
There is a thirty year tradition of functions using None for default 
arguments, that's not going to go away.

Neither are we going to force function writers to accept None as a 
default. So the way functions can be called will depend partially on the 
function itself, and partially on the caller's personal choice for how 
they prefer to handle defaults.



> Since Python is a strongly typed language, it seems more consistent to me that
> this code should throw an error:
> def getoptions():
>     ... # code to get options
>     # whoops! missing return statement
>     #return os.environ

Being strongly typed, or weakly typed, has nothing to do with return 
statements. In Python, there is a 30 year tradition of being permitted 
to leave out the return statement in functions or methods intended to be 
used as "procedures" that operate by side-effect with no meaningful 
return value.

We aren't going to break thousands of programs by making it an error to 
leave out the return statement.


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

Reply via email to