解包

1、任何可迭代對象都支持解包,可迭代對象包括元組、字典、集合、字符串、生成器等實現(xiàn)了next方法的一切對象
2、python3中,支持更高級的解包操作,用星號操作使得等號左邊的變量個數(shù)可以少于右邊迭代對象中元素的個數(shù)
3、函數(shù)調(diào)用時,可以用 * 或者 ** 解包可迭代對象,作為參數(shù)傳遞


對可迭代對象解包,賦值方式

>>> a,b,c=['a',[1,2,3],'c']    #列表解包
>>> a
'a'
>>> b
[1, 2, 3]
>>> c
'c'
>>> a,b,c=('a',[1,2,3],'c')    #元組解包
>>> a
'a'
>>> b
[1, 2, 3]
>>> c
'c'
#字符串、range()  、enumerate()、zip()類似

對字典解包,解出的是KEY,或者使用dict的內(nèi)置方法

>>> print(*{1:'a',2:'b',3:'c'})
1 2 3
>>> dict1={1:'a',2:'b',3:'c'}
>>> a,b,c=dict1.keys()
>>> a
1
>>> b
2
>>> c
3
>>> a,b,c=dict1.items()
>>> a
(1, 'a')
>>> b
(2, 'b')
>>> c
(3, 'c')

用于列表拼接,并不是所有的列表可以用‘+’拼接的,這時候使用解包就很方便

>>> list1=[1,2,3]
>>> list2=range(4,6)
>>> list1+list2     #range()的列表不能使用‘+’拼接
Traceback (most recent call last):
  File "<pyshell#53>", line 1, in <module>
    list1+list2
TypeError: can only concatenate list (not "range") to list
>>> [*list1,*list2]
[1, 2, 3, 4, 5]

注意,使用解包賦值兩邊的值要相等,不等會報錯

>>> a,b=[1,2,3]
Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    a,b=[1,2,3]
ValueError: too many values to unpack (expected 2)
>>> a,b,c,d=[1,2,3]
Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    a,b,c,d=[1,2,3]
ValueError: not enough values to unpack (expected 4, got 3)

新版本的python對解包方式有了更好的處理,與函數(shù)傳參數(shù)一樣,收集參數(shù)方式:傳入列表

>>> a,*b=[1,2,3]    #第一個給a,剩余的收集給b
>>> a
1
>>> b
[2, 3]
>>> *a,*b=[1,2,3]    #無法確認(rèn)賦值方式
SyntaxError: two starred expressions in assignment
>>> a,*b,c=[1,2,3,4]    #第一個給a,最后一個給c,剩余的收集給b
>>> a
1
>>> b
[2, 3]
>>> c
4
>>> a,*b,c,d=[1,2,3,4]
>>> b
[2]

在函數(shù)使用中,我們經(jīng)??吹絽?shù)args,*key

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容