蟒蛇:我什么时候能解开发电机?(python: when can I unpack a genera

2019-07-29 20:07发布

它是如何引擎盖下工作吗? 我不明白下面的错误的原因:

>>> 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

Answer 1:

*iterable语法仅在函数调用(在函数定义)的参数列表的支持。

在Python 3.x中,你也可以用它在赋值语句,像这样的左侧:

[*args] = [1, 2, 3]

编辑 :请注意,有计划,以支持剩余的概括 。



Answer 2:

在Python 3运行此给出了更描述性错误消息。

>>> *f()
SyntaxError: can use starred expression only as assignment target


Answer 3:

这两个错误都出现了同样的事情:你不能使用*表达式的左手侧。

我不知道你期待在这些情况下发生的,但它是无效的。



文章来源: python: when can I unpack a generator?