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](https://i.stack.imgur.com/EyfoY.jpg?s=256&g=1)
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 2 years
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