[Python-ideas] Accessing the result of comprehension's expression from the conditional
dreamingforward at gmail.com
Sat Jun 20 20:11:49 CEST 2009
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
> 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).
> Listcomps and genexps are like lambdas: run up against their limits and
> you should switch to a regular for loop or generator.
Generally decent advice, but there is value to exploring the
Kolomogorov optimums for a given expressive need (compressing the
highest amount of meaning in the simplest construction). In fact, I
consider Python to be one of best languages in this regard (it's
syntax being the evolution of programming-expressive compactness while
being complete in itself. (In contrast to Perl, for example, which
offloads the complexity to the programmer.)
More information about the Python-ideas