Python 简明教程

Python - Unpack Tuple Items

Unpack Tuple Items

术语“解包”指的是解析 tuple 项为单独 variables 的过程。在 Python 中,括号是序列对象的字面表示的默认分隔符。

声明元组的以下语句是相同的。

>>> t1 = (x,y)
>>> t1 = x,y
>>> type (t1)
<class 'tuple'>

Example

若要将元组项存储在单独的变量中,请在赋值运算符的左侧使用多个变量,如此处所示 −

tup1 = (10,20,30)
x, y, z = tup1
print ("x: ", x, "y: ", "z: ",z)

它将生成以下 output

x: 10 y: 20 z: 30

这就是在单独变量中拆解元组方法。

在上例中,赋值运算符左侧的变量数等于元组中的项数。如果数量不相等怎么办?

ValueError While Unpacking a Tuple

如果变量数多于或少于元组的长度,Python 会引发 ValueError。

Example

tup1 = (10,20,30)
x, y = tup1
x, y, p, q = tup1

它将生成以下 output

  x, y = tup1
  ^^^^
ValueError: too many values to unpack (expected 2)
  x, y, p, q = tup1
  ^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 3)

Unpack Tuple Items Using Asterisk (*)

在这种情况下,将“ " symbol is used for unpacking. Prefix " ”变为“y”,如下所示 −

Example 1

tup1 = (10,20,30)
x, *y = tup1
print ("x: ", "y: ", y)

它将生成以下 output

x: y: [20, 30]

元组中的第一个值被分配给“x”,其余的项分配给了变为列表的“y”。

Example 2

在本例中,元组包含 6 个值,待拆包的变量有 3 个。我们在第二个变量前加上“*”。

tup1 = (10,20,30, 40, 50, 60)
x, *y, z = tup1
print ("x: ",x, "y: ", y, "z: ", z)

它将生成以下 output

x: 10 y: [20, 30, 40, 50] z: 60

在这里,值首先被拆包成“x”和“z”,然后其余的值作为列表分配给“y”。

Example 3

如果我们在第一个变量中加上“*”会怎么样?

tup1 = (10,20,30, 40, 50, 60)
*x, y, z = tup1
print ("x: ",x, "y: ", y, "z: ", z)

它将生成以下 output

x: [10, 20, 30, 40] y: 50 z: 60

在此同样地,元组以这样的方式被拆包:各个变量首先获取值,剩下的值留给列表“x”。