On Thu, Oct 13, 2016 at 6:55 PM, Steven D'Aprano
On Thu, Oct 13, 2016 at 04:34:49PM +0200, Martti Kühne wrote:
If I had seen a list comprehension with an unpacked loop variable:
[t for t in [(1, 'a'), (2, 'b'), (3, 'c')]]
Martti, somehow you have lost the leading * when quoting me. What I actually wrote was:
[*t for t in [(1, 'a'), (2, 'b'), (3, 'c')]]
Sorry for misquoting you. Can I fix my name, though? Also, this mail was too long in my outbox so the context was lost on it. I reiterate it, risking that I would annoy some, but to be absolutely clear.
As it happens, python does have an external consumption operation that happens externally with an iteration implied:
If you replace the t with *t, you get a syntax error:
I meant that statement in context of the examples which were brought up: the occurrence of a list comprehension inside an array have the following effect: 1) [ ..., [expr for t in iterable] ] is equivalent to: def expr_long(iterable, result): result.append(iterable) return result expr_long(iterable, [ ..., ]) so, if you make the case for pep448, you might arrive at the following: 2) [ ..., *[expr for expr in iterable] ] which would be, if I'm typing it correctly, equivalent to, what resembles an external collection: def expr_star(list_comp, result): result.extend(list(list_comp)) return result expr_star(iterable, [ ..., ]) Having this in mind, the step to making: [ ..., [*expr for expr in iterable], ] from: def expr_insidestar(iterable, result): for expr in iterable: result.extend(expr) return result does not appear particularly far-fetched, at least not to me and a few people on this list. cheers! mar77i