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~
_______________________________________________
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