[Python-ideas] Accessing the result of comprehension's expression from the conditional
Mathias Panzenböck
grosser.meister.morti at gmx.net
Sat Jun 20 21:29:27 CEST 2009
average wrote:
> From: Lie Ryan wrote:
>> In list/generator comprehension, currently we have no way to access the
>> result of the expression and have to write something like this:
>>
>> [f(x) for x in l if f(x) > 0]
>>
>> if f() is heavy or non-pure (i.e. have side effects), calling f() twice
>> might be undesirable.
>>
>> I'm suggesting about something like:
>>
>> [f(x) for x in l if @ > 0]
>>
>> where @ is the result of the listcomp's expression (i.e. f(x))
>>
>> Personally, I don't like the use of symbols like @, as python is not
>> perl. I'm still thinking of a better syntax/approach and is open for
>> suggestion.
>>
>> What do you guys think?
>
> I think it's a fine idea. The English language has evolved such a
> construct, typically used when one wants to highlight (rather than
> simply *refer* (as a pronoun does) to) the dominant noun without
> resorting to redundancy.
>
> [f(x) for x in l if same > 0] OR another possibility
> [f(x) for x in l if self > 0]
>
> obviously syntax highlighting makes this (or any keyword) standout
> better. Would be interesting to consider other usages for such a
> keyword addition (in the case of the former).
>
I dunno. What about nested constructs? Such unnamed variables lead to
ambiguities. E.g.:
[f(x) for x in l1 if y > sum(z for f in l2 if @ > 0)]
To which value does the @ refer to? To the most inner one would be an obvious
solution. But then, how do you refer to the outer value? It suddenly gets
invisible (overwritten?). Use @@ for the next outer value? No I don't like it.
-panzi
More information about the Python-ideas
mailing list