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

Ethan Furman ethan at stoneleaf.us
Wed Oct 9 02:16:25 CEST 2013


On 10/08/2013 04:33 PM, 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/

I like it!  :)

Feedback below...


>
>
> ==============================
> Notes For A Future Implementor
> ==============================
>
[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``,
                                     ^
     called is doubled -------------/

> 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``.

To stick with current practice:

--> type(Ellipsis)
<type 'ellipsis'>

--> type(None)
<type 'NoneType'>

--> type(NotImplemented)
<type 'NotImplementedType'>

The instance should be Undefined and its class either undefined or UndefinedType.


> But this raises a further problem.  How do can we tell the
> difference between "this positional-only parameter did not
> receive an argument" and "the caller passed in ``undefined``
> for this parameter"?
>
> It'd be nice to make it illegal to pass ``undefined`` in
> as an argument to a function--to, say, raise an exception.
> But that would slow Python down, and the "consenting adults"
> rule appears applicable here.  So making it illegal should
> probably be strongly discouraged but not outright prevented.

Agreed.


> However, it should be allowed (and encouraged) for user
> functions to specify ``undefined`` as a default value for
> parameters.

Also agreed.


> ====================
> Unresolved Questions
> ====================
>
> There are three types of parameters in Python:
>
>    1. positional-only parameters,
>    2. positional-or-keyword parameters, and
>    3. keyword-only parameters.
>
> Python allows functions to have both 2 and 3.  And some
> builtins (e.g. range) have both 1 and 3.  Does it make
> sense to have functions that have both 1 and 2?  Or
> all of the above?

Rather than try to think up the cases where it makes sense, let's just support all three.


Thanks for writing this up, Larry!

--
~Ethan~


More information about the Python-Dev mailing list