[Python-3000] Cleaning up argument list parsing (was Re: More wishful thinking)

Nick Coghlan ncoghlan at gmail.com
Thu Apr 20 12:50:46 CEST 2006


Jim Jewett wrote:
> On 4/19/06, Nick Coghlan <ncoghlan at gmail.com> wrote:
> 
>> Then you'd have:
>>
>>    def f(a, *(b, c=1, *args), **(d, e=2, **kwds)):
>>        # Silly function
>>
>> 'a' would be a normal positional-or-keyword argument
>> 'b' would be a required positional-only argument
> 
> Am I reading that correctly?
> 
> Looking only at a and b the possible calling signatures are exactly:
> 
>     f(1, 2)
>     f(a=1, 2)
> 
> because b can't be named but must appear second, and nothing except a
> can appear before it because of the rules on positional arguments.

Both would be illegal. The first one misses the required keyword argument 'd', 
the second one is a SyntaxError because you can't have a keyword argument 
before a positional one.

Some legal combinations:

   f(1, 2, 3, d=1) # Positional args a, b and c
   f(1, 2, 3, 4, 5, 6, d=1) # Positional args a, b and c and (4, 5, 6) as args
   f(2, a=1, d=1) # Provide a as a keyword arg instead

You'd never define a function with a signature as insane as the one in the 
example though - you'd only use it for cases where you accepted arbitray 
keyword arguments, but wanted to permit some positional arguments (like 
'self') without accidental conflicts.

This seems to be more of a theoretical problem than a practical one though. . .

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org


More information about the Python-3000 mailing list