On Tue, Feb 27, 2018 at 11:46 PM, Matt Arcidy marcidy@gmail.com wrote:
From readability, the examples put forth have been to explain the advantage, with which I agree. However, i do not believe this scales well.
[(foo(x,y) as g)*(bar(y) as i) + g*foo(x,a) +baz(g,i) for x... for y...]
This definitely looks hard to read. Let's compare it to:
lst = [] for x in something: for y in other_thing: g = f(x, y) i = bar(y) lst.append(g*foo(x,a) + baz(g,i))
Obviously the one-liner is shorter, but the full loop looks a heck of a lot more readable to me.
I was thinking of an example closer to the PEP like this:
[((my_object.calculate_the_quantity(quant1, vect2, arr3) as x), log(x)) for quant1 in quants]
Just one "as" clause, but a long enough expression I wouldn't want to repeat it. I still feel this suffers in readability compared to the existing option of (even as a non-unrolled comprehension):
[(x, log(x)) for x in (my_object.calculate_the_quantity(quant1, vect2, arr3) for quant1 in quants)]
Sure, again we save a couple characters under the PEP, but readability feels harmed not helped. And most likely this is another thing better spelled as a regular loop.