Special keyword argument lambda syntax

MRAB google at mrabarnett.plus.com
Fri Mar 13 16:33:26 CET 2009


Rhodri James wrote:
> On Fri, 13 Mar 2009 14:49:17 -0000, Beni Cherniavsky 
> <beni.cherniavsky at gmail.com> wrote:
> 
>> Specification
>> =============
>>
>> Allow keyword arguments in function call to take this form:
>>
>>     NAME ( ARGUMENTS ) = EXPRESSION
>>
>> which is equivallent to the following:
>>
>>     NAME = lambda  ARGUMENTS: EXPRESSION
>>
>> except that NAME is also assigned as the function's `__name__`.
> 
> My first instinct on seeing the example was that "key(n)" was a function 
> *call*, not a function definition, and to remember the thread a month or 
> two ago about assigning to the result of a function call.  I'm inclined 
> to think this would add confusion rather than remove it.
> 
Guido wants to keep the syntax LL(1), so you're not the only one who has 
a problem with it! :-)

I think that:

def NAME ( ARGUMENTS ): EXPRESSION

is still LL(1).

For example:

 >>> sorted(range(9), def key(n): n % 3)
[0, 3, 6, 1, 4, 7, 2, 5, 8]



More information about the Python-list mailing list