[Python-Dev] decorate-sort-undecorate

Phillip J. Eby pje at telecommunity.com
Wed Oct 15 21:36:44 EDT 2003


At 05:27 PM 10/15/03 -0700, Peter Norvig wrote:
>As it turns out, I have a proposed syntax for something I call an
>"accumulation display", and with it I was able to implement and test a
>SortBy in about a minute.  It uses the syntax
>
> >>> [SortBy: abs(x) for x in (-2, -4, 3, 1)]
>[1, -2, 3, -4]
>
>where SortBy is an expression (in this case an identifier bound to a
>class object), not a keyword.  Other examples of accumulation displays
>include:
>
>     [Sum: x*x for x in numbers]
>     [Product: Prob_spam(word) for word in email_msg]
>     [Min: temp(hour) for hour in range(24)]
>     [Top(10): humor(joke) for joke in jokes]
>     [Argmax: votes[c] for c in candidates]

+0.  You can do any of these with a function, if you're willing to let the 
entire list be created, and put any needed parameters in as a tuple, e.g.:

Top(10, [(humor(joke),joke) for joke in jokes])

So, if we had generator comprehensions, the proposed mechanism would be 
unnecessary.  Also, note that [] implies the return value is a list or 
sequence of some kind, when it's not.

IMO, it would really be better to have some kind of generator comprehension 
to make inline iterator creation easy, and then put the function or class 
or whatever outside the generator comprehension.  Then, it's clear that 
some function is being applied to a sequence, and that you should look to 
the function to find out the type of the result, e.g.:

Top(10, [yield humor(joke),joke for joke in jokes])




More information about the Python-Dev mailing list