python 中加星标的列表变量交换

starred list variable swapping in python

我有一个概念性的问题。我有一些代码片段及其相应的输出

ls = [1,2,3,4]
a = '?'
a, *ls = *ls, a

a: 1 ls: [2, 3, 4, '?']

ls = [1,2,3,4]
a = '?'
a, *ls = ls, a

a: [1, 2, 3, 4] ls: ['?']

ls = [1,2,3,4]
a = '?'
a, ls = *ls, a

ValueError: too many values to unpack (expected 2)

第一个对我来说很有意义,但是示例 2 和示例 3 让我感到困惑。为什么第二个和第三个示例的输出是这样的?

示例 1 分配了 5 个元素 (*ls, a)。第一个转到第一个变量,其余转到带星号的变量 (a, *ls)。

示例 2 分配 2 个元素 (ls, a)。第一个元素转到第一个变量,其余元素(即另一个元素)转到带星号的变量 (a, *ls)。

示例 3 尝试将 5 个元素 (*ls, a) 分配给恰好两个变量。这将留下 3 个未分配的值,因此您会收到错误消息。