[Python-ideas] Accessing the result of comprehension's expression from the conditional
Mathias Panzenböck
grosser.meister.morti at gmx.net
Fri Jun 19 21:56:44 CEST 2009
Chris Rebert wrote:
> On Fri, Jun 19, 2009 at 10:54 AM, Mathias
> Panzenböck<grosser.meister.morti at gmx.net> wrote:
>> You could write:
>> [x|y <- l, x <- [f(y)], x > 0]
>>
>> Oh, wait. Thats Haskell. And even in haskell you would write:
>> [x|x <- map f l, x > 0]
>>
>> In Python you can write:
>> [x for x in map(f,l) if x > 0]
>>
>> In Python 2.x you may want to write:
>> from itertools import imap
>> [x for x in imap(f,l) if x > 0]
>>
>> A more SQL like approach that would fit somewhat with pythons syntax would
>> be (as you can see its exactly the same lengths as the above but needs a new
>> name):
>> [f(x) as y for x in l if y > 0]
>>
>> Because in SQL you can write (IIRC):
>> select f(x) as y from l where y > 0;
>>
>> Maybe something like .Nets LINQ would be a nice idea to integrate in python?
>
> Comprehensions and generator expressions already give us most of the
> LINQ functionality. Add in `list()` and the ability to `.sort()` lists
> with a `key` argument and you have the entire thing, except for the
> one corner case being discussed. Unless I've overlooked something...
Yes: With LINQ its possible to build a query object out of an LINQ expression
instead of evaluating it eagerly. This is used primarily to generate SQL code
while still using syntax native to the host language (C#) and preserving type
safety (ok the later cannot be done in python).
-panzi
More information about the Python-ideas
mailing list