[Python-Dev] Formatting of positional-only parameters in signatures

Yury Selivanov yselivanov.ml at gmail.com
Tue Jan 21 16:59:36 CET 2014


There is one more, hopefully last, open urgent question with the signature 
object. At the time we were working on the PEP 362, PEP 457 didn’t 
exist. Nor did we have any function with real positonal-only parameters, 
since there was no Argument Clinic yet. However, I implemented 
rudimentary support for them: 

“Parameter.POSITIONAL_ONLY” constant;

“Signature.bind” and “Signature.bind_partial” fully support functions
with positional-only parameters;

“Signature.__str__” renders them distinctively from other kinds.

The last point is the troublesome now. "Signature.__str__” renders
positional-only parameters in ‘<>’ brackets, so in:

foo(<ham>, <spam>, baz)

“ham” and “spam” are positional-only. The choice of angle brackets was
unfortunate, as, first of all, this wasn’t really discussed on 
python-dev, and second, it’s easy to think that those parameters are
optional.

Now, with the AC landing in 3.4, we need to decide how positional-only
parameters will look like.

Without starting a new discussion similar to what we had prior to PEP 457,
I think we have three options:

1. Leave it as is. Obviously, the downside is the potential confusion 
with “optional” notation.

2. Adopt PEP 457 style: using “/“ to separate positional-only parameters
from the rest.

3. Don’t use any notation, just render them as plain arguments:
"foo(ham, spam, baz)". The downside here is that the users will be 
confused, and might try passing those parameters with keywords, or
binding them with keywords.

Thoughts?


Yury


More information about the Python-Dev mailing list