Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 请解释*elements,=iterable结构_Python_Python 3.x - Fatal编程技术网

Python 请解释*elements,=iterable结构

Python 请解释*elements,=iterable结构,python,python-3.x,Python,Python 3.x,从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引入的新功能。

从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引入的新功能。在政治公众人物中有描述,没有问题


然而,我以前从未见过
*元素,=iterable
。您能解释一下它是如何工作的以及为什么创建一个列表吗?

是的,这是一个新功能。好吧,之所以这样做是因为需要打开列表中的“其余部分”。因此,请看以下示例:

>>> 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知道
范围(3)
的“其余部分”应该放入
e
,在这种情况下,
[0,1,2]
是一个完整的值

否则使用:

>>> *e = range(3)
  File "<stdin>", line 1
SyntaxError: starred assignment target must be in a list or tuple
*e=范围(3)
文件“”,第1行
SyntaxError:带星号的分配目标必须位于列表或元组中
它不起作用


下面的解释。

@AshwiniChaudhary完美的答案,谢谢。谢谢。您没有回答为什么它会创建一个列表,但是链接的PEP3132在规范部分中说明了它。我的主要问题是:
请解释*elements,=iterable构造
。我试着回答,给我一点时间。