On 01/17/2018 08:29 AM, Ethan Furman wrote:
On 01/17/2018 08:14 AM, Serhiy Storchaka wrote:
17.01.18 16:34, Victor Stinner пише:
In Februrary 2017, I proposed on python-ideas to change the Python
syntax to allow to declare positional-only parameters in Python:

https://mail.python.org/pipermail/python-ideas/2017-February/044879.html
https://mail.python.org/pipermail/python-ideas/2017-March/044956.html

The main problem -- designing a syntax that does not look ugly.

The syntax question is already solved:

   def some_func(a, b, /, this, that, *, the_other):
       # some stuff

Everything before the slash is positional-only, between the slash and star is positional-or-keyword, and after the star is keyword-only.  This is what is in our generated help(), and there is a nice symmetry between '/' and '*' being opposites, and positional/keyword being opposites.  And slash is certainly no uglier than star.  ;)

To clarify: this is the syntax used by "Argument Clinic", both as its input language, and as part of its output, exposed via the __text_signature__ attribute on builtins.

Why did Argument Clinic choose that syntax?  It was suggested by one Guido van Rossum in March 2012:

   https://mail.python.org/pipermail/python-ideas/2012-March/014364.html
   https://mail.python.org/pipermail/python-ideas/2012-March/014378.html
   https://mail.python.org/pipermail/python-ideas/2012-March/014417.html


I'm not wading into the debate over what syntax Python should use if it adds positional-only parameters, except to say that I think "/" is reasonable.  If Python winds up using a different syntax, I'd look into modifying Argument Clinic so that it accepts both this hypothetical new syntax and the existing syntax using "/".



Would we be adding yet a third argument-parsing function, PyArg_ParseTupleAndKeywordsWithPositionalOnly()?  I would actually propose a different approach: modify Argument Clinic so it generates custom argument-parsing code for each function, adding a new call type (which I propose calling "METH_RAW" or "METH_STACK") where the stack is passed in directly.  I spent some time on this in the past, though I got distracted and now haven't touched it in years.



Cheers,


//arry/
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to