Pre-PEP: Unpacking in Comprehensions

To even better justify the new syntax over existing approaches, I think we can further generalize unpacking in comprehensions by allowing * and ** to unpack any arbitrary expression within a comprehension, not just the outermost expression.

So that as an example to flatten [1, 2, [3, 4]] into [1, 2, 3, 4]:

[*x if isinstance(x, Iterable) else x for x in its]

would be equivalent to:

[x for it in its for x in (it if isinstance(it, Iterable) else [it])]

This can potentially be done by making * and ** true unary operators that wrap the operand in a new Unpackable object for the yielder of a comprehension to unwrap and unpack.

1 Like