[Python-ideas] Accessing the result of comprehension's expression from the conditional (original) (raw)

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