[PY3]——內建資料結構(8)——解構與封裝

Jelly_lyj發表於2017-03-18

 

### 解構的理解與用法 ###

解構是python很有特色的一個功能,被很多語言借鑑(例如ES6)

# 元素按照順序賦值給變數
In [31]: lst=list(range(5))
In [32]: head,*mid,tail=lst 
In [33]: print(head,tail)
0 4
In [34]: print(mid)
[1, 2, 3]

# 變數和元素個數必須匹配
In [36]: v1,v2,v3,v4,v5,v6=lst
ValueError: not enough values to unpack (expected 6, got 5)

# *表示可以接受任意個數的元素
# 但*變數不能單獨出現
In [35]: *v=lst
SyntaxError: starred assignment target must be in a list or tuple
# 也不能重複出現
In [40]: head,*m1,*m2,tail=list(range(5)) ^
SyntaxError: two starred expressions in assignment
# 帶*的這個變數的輸出是一個列表
In [37]: head,*mid,tail=1,2
In [38]: print(head,tail)
1 2
In [39]: print(mid)
[]

# 解構是支援多層次的
In [14]: lst=[1,(2,3),5]
In [15]: _,(_,val),*_=lst
In [16]: print(val)
3
In [17]: _,[*_,val],*_=lst
In [18]: print(val)
3

 

### 一個慣例,下劃線‘_’ ###

# python有一個慣例,是使用單個下劃線“_”來表示丟棄該變數

In [42]: head,*_,tail=lst
In [7]: v1,_,v3,*_,vd,_=lst

 

### 解構的使用場景 ###

1. 解析配置檔案

In [20]: key,_,value='env=PATH=/usr/bin:$PATH'.partition('=')

In [21]: print(key);print(value)
env
PATH=/usr/bin:$PATH

 

2. 非常複雜的資料結構,多層巢狀的線性結構的時候,可以用解構快速提取其中的值

 

3. 函式返回值

 

### 封裝 ###
封裝:相當於定義一個元組時省略小括號

In [18]: t1=1,2;t2=(1,2)

In [20]: type(t1)
Out[20]: tuple

In [21]: type(t2)
Out[21]: tuple      //t1和t2等效

 

# 可用於快速交換兩個變數的值
In [1]: x=1;y=2

In [3]: x,y=y,x   //左邊解構,右邊封裝

In [4]: print(x,y)
2 1

 

相關文章