On 11/9/2021 1:52 PM, Sebastian Rittau wrote:
Am 09.11.21 um 19:26 schrieb Terry Reedy:
The signature of Sebastian's function with honest parameter names is foo(x_or_y, required_y=_NotGiven, /).  It is the 2nd argument, not the first, that is optional, as with range.  If required_y is not given, than x_or_y must be y, and x is given a default that is not part of the signature because it is explicitly bound when called. If required_y *is* given, then x_or_y can be x.

Just to clarify: This proposal works differently than how range() works. foo(3) would be illegal as the required second parameter ("y") is missing.

No it is not. If there is one required positional parameter and one supplies one positional argument, then that argument must be bound to that parameter name.

This can be solved by either supplying both "x" and "y", e.g. foo(None, 3), or by using a named parameter for "y": foo(y=3).

You are asking that 'x' be required if 'y' is passed by position but not if 'y' is passed by name. This is contradictory.

Note that range does not allow passing by keyword and I specified the same for foo. If you make 'y' keyword only, then there is no problem making 'x' optional.

the honest names are foo(x=None, y) in my proposal.

No, because you want 'x' is required or not depending on how 'y' is passed.


--
Terry Jan Reedy
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/UNZM5KMAYQJINBVX5CLBYYFNDU3WWS6L/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to