为了教育起见,我会稍微长一点。
在 Python 中,元组用括号分隔,例如:(1, 2, 3)。
不幸的是,如果简单地指定为 (1),则仅由单个元素(如 1)组成的元组将是模棱两可的(从解析的角度来看),因为这可能意味着 整数表达式中间的括号内。
为了克服这个问题,您可以指定一个只有一个元素的元组,该元素后跟一个逗号,如(1,)。 (为了清楚起见,comma 是使它成为元组的原因,而不是括号,当事情不模棱两可时我们可以省略它,这就是我在下面所做的)。毫无疑问,元组包含一个单一的 1 作为其元素,如下例所示:
>>> a = (1)
>>> a
1
>>> b = (1,)
>>> b
(1,)
>>> b[0]
1
>>> c, = b
>>> c
1
>>>
您提到的是一种“解包”元组的方法,即访问元组的特定元素。您使用的语法的另一种替代方法是用 0 对元组中的元素进行索引,例如上面示例中的 b[0]。
对于具有多个元素的元组,您可以通过指定一个属性与元组具有的相同数量个元素来解压它们:
>>> x, y = (1, 2)
>>> x
1
>>> y
2
如果在解包元组时不使用相同数量的元素,则会抛出异常:
>>> z, = (1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>>
在解包理论“失败”的“示例”中,您可以简单地使用:
>>> a, _ = [2, 3]
>>> a
2
注意那里的_,这是 Python 中常用的变量,表示“我们不在乎”。
作为附录,请注意,在 a, _ = [2,3] 中,您正在从一个可变类型 list 隐式创建一个 tuple,它是一个不可变类型. (请注意,这种“隐式”转换是概念性的,因为 Python 解释器可能不会在字节码中生成 BUILD_TUPLE 指令)。请注意以下属性中的微妙之处:
>>> a, b = [2, 3]
>>> a
2
>>> b
3
>>> a, b
(2, 3)
>>> c, d = tuple([2, 3])
>>> c
2
>>> d
3
>>> e = [2, 3]
>>> type(e)
<type 'list'>
>>> type((a, b))
<type 'tuple'>