请解释* elements,= iterable构造

时间:2016-09-07 07:18:07

标签: python python-3.x

来自PEP448:

  

虽然* elements,= iterable导致元素成为列表,但= =   * iterable,使元素成为元组。造成这种情况的原因可能会使不熟悉构造的人感到困惑。

嗯,我是其中一个人。我试了一下:

RuntimeException

前者适用于Python 3.4和3.5。

后者仅在3.5。这是上述PEP448引入的新功能。它在PEP中描述,没有问题。

但是,我以前从未见过>>> *e, = range(3) >>> e [0, 1, 2] >>> e = *range(3), >>> e (0, 1, 2) 。你能解释它是如何工作的以及它为什么创建一个列表吗?

1 个答案:

答案 0 :(得分:5)

是的,这是一项新功能。好吧,这是因为需要打开列表的“其余”。那么,看看这些例子:

>>> a, *e = range(3)
>>> print(a, e)
0 [1, 2]

>>> a, *e, b = range(3)
>>> print(a, e, b)
0 [1] 2

现在你的例子:

>>> *e, = range(3)
>>> print(e)
[0, 1, 2]

相当于:

>>> (*e,) = range(3)
>>> print(e)
[0, 1, 2]

这样逗号只是为了使它成为一个可迭代的元素(*e,)。因此,python知道range(3)的“其余部分”应放入e,在这种情况下[0, 1, 2]的整数值。

否则使用:

>>> *e = range(3)
  File "<stdin>", line 1
SyntaxError: starred assignment target must be in a list or tuple

它不起作用。

link下的其余解释。