Python解包不工作
a = [1,2,3,4] *m = a; //error b,*m = a print(m) //working
字符串请解释为什么前一个不工作。
jtw3ybtb1#
根据PEP-3132(它引入了这种 “扩展的可迭代解包” 语法)和语言参考,“带星号”的目标仅在目标是可迭代对象的赋值中有效。使用带星号的表达式作为单独的赋值目标也是错误的,如
*a = range(5)
字符串然而,这是有效的语法:
*a, = range(5)
型为了使其在语法上有效,你可以这样做:
*m, = a
型甚至是:
[*m] = a
型但是请注意,创建列表的浅拷贝的惯用方法是使用切片:
m = a[:]
型
3pvhb19x2#
a = [1,2,3,4] *m = a
字符串将抛出一个错误,因为你试图使用带星号的表达式作为一个单独的赋值目标。你可以使用*m, = a,[*m] = a或(*m,) = a来修复这个问题。
(*m,) = a
a = [1,2,3,4] b,*m = a print(m)
型这将工作。打印B将返回1,m将返回列表[2,3,4]。
2条答案
按热度按时间jtw3ybtb1#
根据PEP-3132(它引入了这种 “扩展的可迭代解包” 语法)和语言参考,“带星号”的目标仅在目标是可迭代对象的赋值中有效。
使用带星号的表达式作为单独的赋值目标也是错误的,如
字符串
然而,这是有效的语法:
型
为了使其在语法上有效,你可以这样做:
型
甚至是:
型
但是请注意,创建列表的浅拷贝的惯用方法是使用切片:
型
3pvhb19x2#
字符串
将抛出一个错误,因为你试图使用带星号的表达式作为一个单独的赋值目标。你可以使用
*m, = a
,[*m] = a
或(*m,) = a
来修复这个问题。型
这将工作。打印B将返回1,m将返回列表[2,3,4]。