[Python-3000] PEP 3102

Joel Bender jjb5 at cornell.edu
Fri Feb 15 20:55:46 CET 2008


Dj Gilcrease wrote:

> If I understand right, positional only arguments would not be optional
> in any way shape or form, thats what default arguments are for.

I have been expecting that by providing a default value to an argument 
in the definition that you are making it optional, be it keyword or 
positional.  The PEP doesn't have an example of what this means:

     def f(a, b, *, c): ...

Is 'c' a keyword only argument that must be specified?  In that case I 
don't consider the following confusing, there is a clear indication of 
which arguments are positional and which ones are keyword only.

     def f(a, b=2, *, c=3): ...

Given this definition, which isn't in the PEP but maybe it should be:

     def f(x, *):

I would be perfectly happy if there was an exception for f(x=3), just as 
there is for math.sin(x=3).

> Positional only args would be arguments that you cannot specify by
> keyword, so having a positional only arg that has a default value,
> thus making it optional just seems broken to me.

I think this is a case of differing viewpoints.  When I see a definition 
like this:

     def f(a, b=3): ...

I think of 'b' being an optional argument, you seem to see it 
differently.  I don't use keywords when I specify the values of 
positional arguments, so if I see this in documentation:

     min(iterable[, key=func]) -> value

I don't call min(iterable=[3]) because it returns a TypeError.  So when 
I see something like this:

     def f(x, y):

I've never gotten in the habit of even trying f(y=2, x=3), and I would 
consider it confusing even if and when it works.  Then again, perhaps 
it's because I've never felt compelled to reorder the sequence of values 
of positional parameters when I call a function.


Joel


More information about the Python-3000 mailing list