python: when can I unpack a generator?
Solution 1
The *iterable
syntax is only supported in an argument list of a function call (and in function definitions).
In Python 3.x, you can also use it on the left-hand side of an assignment, like this:
[*args] = [1, 2, 3]
Edit: Note that there are plans to support the remaining generalisations.
Solution 2
Running this in Python 3 gives a more descriptive error message.
>>> *f()
SyntaxError: can use starred expression only as assignment target
Solution 3
The two errors are showing the same thing: you can't use *
on the left-hand side of an expression.
I'm not sure what you're expecting to happen in those cases, but it's not valid.

Rusty Rob
Startups, Entrepreneurship, Ideas, Python, Google App Engine, Javascript, AngularJs, Scalable Web Apps, Mathematics, Go Lang, AI, Google Cloud Platform robert-king.com https://google.com/+RobertKing LinkedIn Quora Twitter
Updated on June 08, 2022Comments
-
Rusty Rob about 1 year
How does it work under the hood? I don't understand the reason for the errors below:
>>> def f(): ... yield 1,2 ... yield 3,4 ... >>> *f() File "<stdin>", line 1 *f() ^ SyntaxError: invalid syntax >>> zip(*f()) [(1, 3), (2, 4)] >>> zip(f()) [((1, 2),), ((3, 4),)] >>> *args = *f() File "<stdin>", line 1 *args = *f() ^ SyntaxError: invalid syntax