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
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.
Running this in Python 3 gives a more descriptive error message.
>>> *f()
SyntaxError: can use starred expression only as assignment target
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With