我想知道下面的代码为什么无效,我正在使用Python3。
然而,如果我只是添加一个变量。
代码是有效的,能否有人解释一下?谢谢。
*x =[1,2,3,4]
然而,如果我只是添加一个变量。
*x, y =[1,2,3,4]
代码是有效的,能否有人解释一下?谢谢。
*x =[1,2,3,4]
*x, y =[1,2,3,4]
星号赋值语句的目标必须是解包的一部分。它表示“获取未被其余解包消耗的项目,并将这些项目的列表分配给此赋值目标”。
当您执行以下操作时
*x = [1, 2, 3, 4]
*x
不是拆包的一部分,因此这是无效的。如果你让它成为拆包的唯一元素:
*x, = [1, 2, 3, 4]
# or
[*x] = [1, 2, 3, 4]
那么它就是有效的。
引入该语法的PEP提到了这个限制:
It is also an error to use the starred expression as a lone assignment target, as in
*a = range(5)
This, however, is valid syntax:
*a, = range(5)
虽然他们可以将 *x = thing
定义为与 [*x] = thing
相同,但这将是一种没有实际好处的特殊情况。
*a = range(5)
要执行上述操作,你需要执行 a = list(range(5))
(你必须将其转换为列表以模拟解包,或者按照生成的错误消息 SyntaxError: starred assignment target must be in a list or tuple
执行 [*a] = range(5)
。
[*x] = [1, 2, 3, 4]
或*x, = [1, 2, 3, 4]
。 - user2357112*x, y = [1,2,3,4]
x和y配对时会被隐式地放在一个元组中,因此它能够正常运行。
请注意,如果你只想把x作为目标变量,你可以将其放在一个列表中进行赋值:
[*x] = [1,2,3,4]
>>> *x = [1, 3, 4]
File "<input>", line 1
SyntaxError: starred assignment target must be in a list or tuple
*x = [1,2,3,4]
做什么? - njzk2