[Python-Dev] PEP 457: Syntax For Positional-Only Parameters
Steven D'Aprano
steve at pearwood.info
Thu Oct 10 01:02:02 CEST 2013
On Wed, Oct 09, 2013 at 04:15:36PM +0200, Larry Hastings wrote:
> >- parameters in optional groups should just have an implied "=None"
> >that can be overriden if desired.
> >
>
> No no no! You can't have a default value, and you definitely couldn't
> use None.
>
> range() decides what its arguments mean based on how many arguments it
> receives. If I understand your proposal correctly, you suggest that
>
> range(None, 5)
>
> would return the same result as
>
> range(5)
>
> But that's simply not how it works.
Hmmm... I'm not entirely sure that I understand, but let me see if I've
got it.
range is defined something like this, only in C:
def range(*args):
if len(args) == 1:
start, stop, step = 0, args[0], 1
elif len(args) == 2:
start, stop, step = args[0], args[1], 1
elif len(args) == 3:
start, stop, step = args
else:
raise TypeError
...
So we can't document range as having the signature:
range(start=None, stop, range=None)
(modulo choice of defaults). Even if some future implementation of
positional-only arguments allowed functions to set defaults, you would
still have to deal with cases like range that don't.
Do I understand you correctly?
If so, then I ask that this PEP should not rule out setting defaults
in the the future, but make it clear that even if defaults are allowed,
there needs to be some way to handle defaultless-but-still-optional
arguments, for cases like range.
--
Steven
More information about the Python-Dev
mailing list