[Python-Dev] PEP 457: Syntax For Positional-Only Parameters

Mark Shannon mark at hotpy.org
Wed Oct 9 22:46:00 CEST 2013


On 09/10/13 00:33, Larry Hastings wrote:
>
> I've contributed a new PEP to humanity.  I include the RST for your
> reading pleasure below, but you can also read it online here:
>
>     http://www.python.org/dev/peps/pep-0457/

Overall I'm in favour.

As a motivation for positional only parameters, consider:

Python 3.2:
 >>> from decimal import Decimal
 >>> d = Decimal(4)
 >>> d.__add__(other=d)
Decimal('8')

Python 3.3:
 >>> from decimal import Decimal
 >>> d = Decimal(4)
 >>> d.__add__(other=d)
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: wrapper __add__ doesn't take keyword arguments


[snip]

> The obvious solution: add a new singleton constant to Python
> that is passed in when a parameter is not mapped to an argument.
> I propose that the value be called called ``undefined``,
> and be a singleton of a special class called ``Undefined``.
> If a positional-only parameter did not receive an argument
> when called, its value would be set to ``undefined``.

There is no need to create an "undefined" value.
Rather than define a parameter by assigning a fake value, just don't 
define it. We already do this for non-parameter locals and it could be 
extended to parameters.

'range' would be defined thus:

def range([start,] stop, [step], /):
     try:
         start
     except UnboundLocalError:
         start = 0
     try:
         step
     except UnboundLocalError:
         step = 1
     ...


Cheers,
Mark.




More information about the Python-Dev mailing list