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 <[email protected] <mailto:[email protected]>> 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
    [email protected] <mailto:[email protected]>
    https://mail.python.org/mailman/listinfo/python-ideas
    Code of Conduct: http://python.org/psf/codeofconduct/



_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to