如今有一個包含 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》