This question already has an answer here:
Star * operator on left vs right side of an assignment statement
(1个答案)
来自PEP448:
当*elements,=iterable使元素成为列表时,元素=
*iterable,使元素成为元组。其原因可能会使不熟悉该结构的人感到困惑。
好吧,我就是那种人我试了一下:
前者在python 3.4和3.5中工作。
后者只有3.5分这是上述PEP448引入的新功能。在那篇文章里有描述,那篇没问题。
然而,我从未见过你能解释一下它是如何工作的吗?为什么它会创建一个列表?
现在举个例子:
相当于:
所以逗号只是为了使它成为一个元素iterable
否则使用:
它不起作用。
剩下的解释是link。
(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