解压序列赋值给多个变量

现在有一个包含 N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给 N 个变量?

任何的序列 (或者是可迭代对象) 可以通过一个简单的赋值语句解压并赋值给多个变量。唯一的前提就是变量的数量必须跟序列元素的数量是一样的。
  代码示例: 

 

 1 >>> p = (12, 16)
 2 >>> x, y = p
 3 >>> x
 4 12
 5 >>> y
 6 16
 7 >>> data = ['ABCD', 66, 90.0, (2018, 4, 14)]
 8 >>> name, shares, price, date = data
 9 >>> name
10 'ABCD'
11 >>> date
12 (2018, 4, 14)
13 >>> name, shares, price, (year, mon, day) = data
14 >>> name
15 'ABCD'
16 >>> year
17 2018
18 >>> mon
19 4
20 >>> day
21 14 

如果变量个数和序列元素的个数不匹配,会产生一个异常。

  代码示例:

1 >>> p = (12, 16)
2 >>> x, y, z = p
3 Traceback (most recent call last):
4   File "<stdin>", line 1, in <module>
5 ValueError: need more than 2 values to unpack

实际上,这种解压赋值可以用在任何可迭代对象上面,而不仅仅是列表或者元组。
包括字符串,文件对象,迭代器和生成器。

  代码示例:

1 >>> s = 'hello'
2 >>> a, b, c, d, e = s
3 >>> a
4 'h'
5 >>> b
6 'e'
7 >>> c
8 'l'

当只需解压一部分,丢弃其他的值时,由于这种情况 下Python 中并没有提
供特殊的语法。可以使用任意变量名去占位,到时候丢掉这些变量就行了。

  代码示例:

1 >>> data = ['ABCD', 66, 90.0, (2018, 4, 14)]
2 >>> _, shares, price, _ = data
3 >>> shares
4 66
5 >>> price
6 90.0

个人疑问:下划线本身也可以作为变量,所以需保证选用的那些占位变量名在其他地方没被使用到。 

如下:

 1 >>> data = ['ABCD', 66, 90.0, (2018, 4, 14)]
 2 >>> _, shares, price, _ = data
 3 >>> _
 4 (2018, 4, 14)
 5 >>> _, shares, price, __ = data
 6 >>> _
 7 'ABCD'
 8 >>> __
 9 (2018, 4, 14)
10 >>>

《Python Cookbook》

 

posted @ 2018-04-14 20:03  linus_gau  阅读(202)  评论(0)    收藏  举报
TOP