我想知道为什么以下代码无效,我正在使用python3
*x =[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
但是,如果我只添加一个变量
*x, y =[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
代码是有效的,任何人都可以解释?谢谢
已加星标的作业目标必须是拆包的一部分.它表示"获取此解包的其余部分未使用的项目,并将这些项目的列表分配给此分配目标".
当你这样做
*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提到了这个限制:
将星号表达式用作单独的赋值目标也是错误的,如
Run Code Online (Sandbox Code Playgroud)*a = range(5)但是,这是有效的语法:
Run Code Online (Sandbox Code Playgroud)*a, = range(5)
虽然它们可以定义*x = thing为相同[*x] = thing,但它将是一个特殊情况,没有真正的好处.