python-3.x 不明白为什么解包不按预期工作

3npbholx  于 2023-11-20  发布在  Python
关注(0)|答案(2)|浏览(91)

Python解包不工作

a = [1,2,3,4]
*m = a; //error

b,*m = a
print(m) //working

字符串
请解释为什么前一个不工作。

jtw3ybtb

jtw3ybtb1#

根据PEP-3132(它引入了这种 “扩展的可迭代解包” 语法)和语言参考,“带星号”的目标仅在目标是可迭代对象的赋值中有效。
使用带星号的表达式作为单独的赋值目标也是错误的,如

*a = range(5)

字符串
然而,这是有效的语法:

*a, = range(5)


为了使其在语法上有效,你可以这样做:

*m, = a


甚至是:

[*m] = a


但是请注意,创建列表的浅拷贝的惯用方法是使用切片:

m = a[:]

3pvhb19x

3pvhb19x2#

a = [1,2,3,4]
*m = a

字符串
将抛出一个错误,因为你试图使用带星号的表达式作为一个单独的赋值目标。你可以使用*m, = a[*m] = a(*m,) = a来修复这个问题。

a = [1,2,3,4]
b,*m = a
print(m)


这将工作。打印B将返回1,m将返回列表[2,3,4]。

相关问题