python:什么时候可以拆开发电机?

时间:2012-06-10 10:04:08

标签: python args iterable-unpacking

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

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

3 个答案:

答案 0 :(得分:9)

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

在Python 3.x中,您也可以在作业的左侧使用它,如下所示:

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

修改:请注意plans to support the remaining generalisations

答案 1 :(得分:4)

在Python 3中运行它会提供更具描述性的错误消息。

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

答案 2 :(得分:1)

这两个错误显示相同的事情:你不能在表达式的左侧使用*

我不确定在这些情况下你会发生什么,但它无效。