[Python-ideas] Positional-only parameters

Sven R. Kunze srkunze at mail.de
Thu Mar 2 14:56:10 EST 2017


Isn't https://www.python.org/dev/peps/pep-0457/ the PEP you are looking for?


On 02.03.2017 19:16, Brett Cannon wrote:
> It seems all the core devs who have commented on this are in the 
> positive (Victor, Yury, Ethan, Yury, Guido, Terry, and Steven; MAL 
> didn't explicitly vote). So to me that suggests there's enough support 
> to warrant writing a PEP. Are you up for writing it, Victor, or is 
> someone else going to write it?
>
> On Tue, 28 Feb 2017 at 13:18 Victor Stinner <victor.stinner at gmail.com 
> <mailto:victor.stinner at gmail.com>> wrote:
>
>     Hi,
>
>     For technical reasons, many functions of the Python standard libraries
>     implemented in C have positional-only parameters. Example:
>     -------
>     $ ./python
>     Python 3.7.0a0 (default, Feb 25 2017, 04:30:32)
>     >>> help(str.replace)
>     replace(self, old, new, count=-1, /)   # <== notice "/" at the end
>         ...
>     >>> "a".replace("x", "y")  # ok
>     'a'
>
>     >>> "a".replace(old="x", new="y")   # ERR!
>     TypeError: replace() takes at least 2 arguments (0 given)
>     -------
>
>     When converting the methods of the builtin str type to the internal
>     "Argument Clinic" tool (tool to generate the function signature,
>     function docstring and the code to parse arguments in C), I asked if
>     we should add support for keyword arguments in str.replace(). The
>     answer was quick: no! It's a deliberate design choice.
>
>     Quote of Yury Selivanov's message:
>     """
>     I think Guido explicitly stated that he doesn't like the idea to
>     always allow keyword arguments for all methods. I.e. `str.find('aaa')`
>     just reads better than `str.find(needle='aaa')`. Essentially, the idea
>     is that for most of the builtins that accept one or two arguments,
>     positional-only parameters are better.
>     """
>     http://bugs.python.org/issue29286#msg285578
>
>     I just noticed a module on PyPI to implement this behaviour on
>     Python functions:
>
>     https://pypi.python.org/pypi/positional
>
>     My question is: would it make sense to implement this feature in
>     Python directly? If yes, what should be the syntax? Use "/" marker?
>     Use the @positional() decorator?
>
>     Do you see concrete cases where it's a deliberate choice to deny
>     passing arguments as keywords?
>
>     Don't you like writing int(x="123") instead of int("123")? :-) (I know
>     that Serhiy Storshake hates the name of the "x" parameter of the int
>     constructor ;-))
>
>     By the way, I read that "/" marker is unknown by almost all Python
>     developers, and [...] syntax should be preferred, but
>     inspect.signature() doesn't support this syntax. Maybe we should fix
>     signature() and use [...] format instead?
>
>     Replace "replace(self, old, new, count=-1, /)" with "replace(self,
>     old, new[, count=-1])" (or maybe even not document the default
>     value?).
>
>     Python 3.5 help (docstring) uses "S.replace(old, new[, count])".
>
>     Victor
>     _______________________________________________
>     Python-ideas mailing list
>     Python-ideas at python.org <mailto:Python-ideas at python.org>
>     https://mail.python.org/mailman/listinfo/python-ideas
>     Code of Conduct: http://python.org/psf/codeofconduct/
>
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170302/81466a26/attachment-0001.html>


More information about the Python-ideas mailing list