python 序列解包的多種形式及用法解析

2022-09-25 14:42:10 字數 2997 閱讀 3025

是python中非常重要和常用的乙個功能,可以使用非常簡潔的形式完成複雜的功能,大幅度提高了**的可讀性,減少了程式設計師的**輸入量。

例如,可以使用序列解包功能對多個變數同時進行賦值。

>>> x, y, z = 1, 2, 3 #多個變數同時賦值

>>> v_tuple = (false, 3.5, 'exp')

>>> (x, y, z) = v_tuple

>>> x, y, z = v_tuple

>>> x, y, z = range(3)#可以對range物件進行序列解包

>>> x, y, z = map(str, range(3)) #使用迭代物件進行序列解包

序列解包也可以用於列表、字典、enumerate物件、filter物件等等,但是對字典使用時,預設是對字典「鍵」進行操作,如果需要對「鍵:值」對進行操作,需要使用字典的items()方法說明,如果需要對字典「值」進行操作,則需要使用字典的values()方法明確指定。

下面的**演示了列表與字典的序列解包操作:

>>> a = [1, 2, 3]

>>> b, c, d = a #列表也支援序列解包的用法

>>> x, y, z = sorted([1, 3, 2]) #sorted()函式返回排序後的列表

>>> s =

>>> b, c, d = s.items()

>>> b

('c', 3)

>>> b, c, d = s #使用字典時不用太多考慮元素的順序

>>> b

'c'>>> b, c, d = s.values()

>>> print(b, c, d)

1 3 2

使用序列解包可以很方便地同時遍歷多個序列。

>>> keys = ['a', 'b', 'c', 'd']

>>> values = 2, 3, 4]

>>> for k, v in zip(keys, values):

print(k, v)

a 1b 2

c 3d 4

下面**演示了對內建函式enumerate()返回的迭代物件進行遍歷時序列解包的用法:

>>> x = ['a', 'b', 'c']程式設計客棧

>>> for i, v in enumerate(x):

print('the value on position is '.format(i,v))

the value on position 0 is a

the value on position 1 is b

the value on position 2 is c

下面對字典的操作也使用到了序列解包:

>>> s =

>;>> for k, v in s.items(): #字典中每個元素包含「鍵」和「值」兩部分

print(k, v)

a 1c 3

b 2另外,序列解包還支援下面的用法:

>>> print(*[1, 2, 3], 4, *(5, 6))

1 2 3 4 5 6

>>> *range(4), 4

(0, 1, 2, 3, 4)

>>>

>>> }

補充:python的序列封包和序程式設計客棧列解包功能---兩種賦值方式例項說明

1、將多個值賦給乙個變數時,python會自動將多個值封裝成元組。這個功能就稱為序列封包;

2、允許將序列(元組或者列表等)直接賦值給多個變數,此時序列的各元素被依次賦值給每乙個變數,此處要求序列的元素個數和變數個數相等,這個功能就成為序列解包。

序列封包示例,將1、2、3封裝成元組後賦值給nums

>>> nums = 1, 2, 3

>>> print(nums)

(1, 2, 3)

>>> print(nums[1])

2序列解包,將tuple_temp的各元素依次賦值給a, b, c, d, e

>>> tuple_temp = tuple(range(1, 10, 2))

>>> print(tuple_temp)

(1, 3, 5, 7, 9)

>>> a, b, c, d, e = tuple_temp

>>> print(a, b, c, d, e)

1 3 5 7 9

將序列封包和序列解包同時運用,就可以讓賦值運算子支援同時將多個值賦值給多個變數。例如:

>>> a, b, c = 1, 2, 3

>>> print(a, b, c)

1 2 3

此處相當於執行了如下過程:

先進行序列封包,將1、2、3封裝到元組abc中

abc = 1, 2, 3

再執行序列解包到變數a、b、c中

a, b, c = abc

序列解包時,可以解出部分變數,剩下的依然使用列表變數儲存。為了這樣操作,python允許在左邊被賦值的變數之前新增「*」,那麼該變數就代表乙個列表,可以儲存多個集合元素,例如:

>>> a, b, *restnum = range(10)

>>> print(a)

0>>> print(b)

1>>> print(restnum)

[2, 3, 4, 5, 6, 7, 8, 9]

>>> *frontnum, lastnum = range(10)

>>> print(frontnum)

[0, 1, 2, 3, 4, 5, 6, 7, 8]

>>> print(lastnum)

9>>> frontnum, *middlenum, lastnum = range(10)

>>> print(frontnum)

0>>> print(middlenum)

[1, 2, 3, 4, 5, 6, 7, 8]

>>> print(lastnum)

9本文標題: python 序列解包的多種形式及用法解析

本文位址: /jiaoben/python/396208.html

python 序列解包的多種形式和用法

序列解包 sequence unpacking 是python中非常重要和常用的乙個功能,可以使用非常簡潔的形式完成複雜的功能,大幅度提高了 的可讀性,減少了程式設計師的 輸入量。例如,可以使用序列解包功能對多個變數同時進行賦值。x,y,z 1,2,3 多個變數同時賦值 v tuple false,...

20 python的函式返回值的多種形式

注意一點就是我們python的函式return之後,比方說它定義了乙個區域性變數,當出了這個函式,這個區域性變數的引用計數會減1,在c語言當 了函式作用域的話區域性變數是直接被銷毀的,而我們python並沒有區域性變數這個概念,我們都是引用,所以只要出了作用域,引用就會減1。那麼問題就來了,減1是不...

python 序列解包

當函式或方法返回元組時,將元組中值賦給變數序列中的變數,這個過程就叫做序列解包。1 序列1,2,3被打包到元組values中 values 1,2,3 type values values 1,2,3 2 序列解包,元組values中的值分別被賦給變數序列中的x,y,z x,y,z values p...