1.1 解壓序列賦值給多個(gè)變量

2018-02-24 15:26 更新

問(wèn)題

現(xiàn)在有一個(gè)包含N個(gè)元素的元組或者是序列,怎樣將它里面的值解壓后同時(shí)賦值給N個(gè)變量?

解決方案

任何的序列(或者是可迭代對(duì)象)可以通過(guò)一個(gè)簡(jiǎn)單的賦值語(yǔ)句解壓并賦值給多個(gè)變量。唯一的前提就是變量的數(shù)量必須跟序列元素的數(shù)量是一樣的。

代碼示例:

>>> p = (4, 5)
>>> x, y = p
>>> x
4
>>> y
5
>>>
>>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
>>> name, shares, price, date = data
>>> name
'ACME'
>>> date
(2012, 12, 21)
>>> name, shares, price, (year, mon, day) = data
>>> name
'ACME'
>>> year
2012
>>> mon
12
>>> day
21
>>>

如果變量個(gè)數(shù)和序列元素的個(gè)數(shù)不匹配,會(huì)產(chǎn)生一個(gè)異常。

代碼示例:

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

討論 實(shí)際上,這種解壓賦值可以用在任何可迭代對(duì)象上面,而不僅僅是列表或者元組。 包括字符串,文件對(duì)象,迭代器和生成器。 代碼示例:

>>> s = 'Hello'
>>> a, b, c, d, e = s
>>> a
'H'
>>> b
'e'
>>> e
'o'
>>>

有時(shí)候,你可能只想解壓一部分,丟棄其他的值。對(duì)于這種情況Python并沒(méi)有提供特殊的語(yǔ)法。但是你可以使用任意變量名去占位,到時(shí)候丟掉這些變量就行了。

代碼示例:

>>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
>>> _, shares, price, _ = data
>>> shares
50
>>> price
91.1
>>>

你必須保證你選用的那些占位變量名在其他地方?jīng)]被使用到。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)