解壓序列賦值給多個變量

如今有一個包含 N 個元素的元組或者是序列,怎樣將它裏面的值解壓後同時賦值給 N 個變量?
spa

任何的序列 (或者是可迭代對象) 能夠經過一個簡單的賦值語句解壓並賦值給多個變量。惟一的前提就是變量的數量必須跟序列元素的數量是同樣的。
  代碼示例: 
code

 

 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 

若是變量個數和序列元素的個數不匹配,會產生一個異常。
對象

  代碼示例:blog

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

實際上,這種解壓賦值能夠用在任何可迭代對象上面,而不單單是列表或者元組。
包括字符串,文件對象,迭代器和生成器。
字符串

  代碼示例:
ast

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

當只需解壓一部分,丟棄其餘的值時,因爲這種狀況 下Python 中並無提
供特殊的語法。可使用任意變量名去佔位,到時候丟掉這些變量就好了。
class

  代碼示例:
變量

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

我的疑問:下劃線自己也能夠做爲變量,因此需保證選用的那些佔位變量名在其餘地方沒被使用到。 module

以下:date

 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》

相關文章
相關標籤/搜索