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')]]
Marttii, somehow you have lost the leading * when quoting me. What I actually wrote was: [*t for t in [(1, 'a'), (2, 'b'), (3, 'c')]] > As it happens, python does have an external consumption operation that > happens externally with an iteration implied: > > for t in iterable: > yield t If you replace the t with *t, you get a syntax error: py> def gen(): ... for t in [(1, 'a'), (2, 'b'), (3, 'c')]: ... yield *t File "<stdin>", line 3 yield *t ^ SyntaxError: invalid syntax Even if it was allowed, what would it mean? It could only mean "unpack the sequence t, and collect the values into a tuple; then yield the tuple". > For your example [t for t in [(1, 'a'), (2, 'b'), (3, 'c')]] that would mean: > > for t in [(1, 'a'), (2, 'b'), (3, 'c')]: > yield t > > And accordingly, for the latter case [*t for t in [(1, 'a'), (2, 'b'), > (3, 'c')]] it would be: > > for item in [(1, 'a'), (2, 'b'), (3, 'c')]: > for t in item: > yield t No it wouldn't. Where does the second for loop come from? The list comprehension shown only has one loop, not nested loops. -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/