当*x,y = [1,2,3,4]合法时,为什么*x = [1,2,3,4]无效?

riv*_*iao 3 python

我想知道为什么以下代码无效,我正在使用python3

*x =[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

但是,如果我只添加一个变量

*x, y =[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

代码是有效的,任何人都可以解释?谢谢

use*_*ica 7

已加星标的作业目标必须是拆包的一部分.它表示"获取此解包的其余部分未使用的项目,并将这些项目的列表分配给此分配目标".

当你这样做

*x = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

*x不是解包的一部分,所以这是无效的.如果你把它作为解包的唯一元素:

*x, = [1, 2, 3, 4]
# or
[*x] = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

那么它是有效的.

引入语法的PEP提到了这个限制:

将星号表达式用作单独的赋值目标也是错误的,如

*a = range(5)
Run Code Online (Sandbox Code Playgroud)

但是,这是有效的语法:

*a, = range(5)
Run Code Online (Sandbox Code Playgroud)

虽然它们可以定义*x = thing为相同[*x] = thing,但它将是一个特殊情况,没有真正的好处.