This question already has an answer here:

Star * operator on left vs right side of an assignment statement
(1个答案)
来自PEP448:
当*elements,=iterable使元素成为列表时,元素=
*iterable,使元素成为元组。其原因可能会使不熟悉该结构的人感到困惑。
好吧,我就是那种人我试了一下:
>>> *e, = range(3)
>>> e
[0, 1, 2]

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

前者在python 3.4和3.5中工作。
后者只有3.5分这是上述PEP448引入的新功能。在那篇文章里有描述,那篇没问题。
然而,我从未见过你能解释一下它是如何工作的吗?为什么它会创建一个列表?

最佳答案

是的,这是一个新功能。好吧,这是因为需要打开“剩下的”清单所以,看看这些例子:

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

所以逗号只是为了使它成为一个元素iterable(*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

关于python - 请解释* elements,= iterable构造,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39363542/

10-11 11:50