舉例:a和b交換賦值
a = 4 b = 5 temp = a a = b b = temp
等價(jià)于a, b = b, a
上句中,等號(hào)右邊使用了封裝,而左邊就使用了解構(gòu)
封裝
右邊封裝,將多個(gè)值使用逗號(hào)分割,組合在一起,本質(zhì)上,返回一個(gè)元組,只是省掉了小括號(hào),是python特有語法,被很多語言學(xué)習(xí)和借鑒
注:在封裝與結(jié)構(gòu)過程中,右邊的封裝過程是先進(jìn)行的
解構(gòu)
把線性結(jié)構(gòu)的元素解開,并順序的賦給其它變量
左邊接納的變量數(shù)要和右邊解開的元素個(gè)數(shù)一致
使用 *變量名 接收
但不能單獨(dú)使用,被 變量名 收集后組成一個(gè)列表*
單獨(dú)使用會(huì)報(bào)錯(cuò):
也不能連續(xù)使用:
丟棄變量
這是一個(gè)慣例,是一個(gè)不成文的約定,不是標(biāo)準(zhǔn):如果不關(guān)心一個(gè)變量,就可以定義改變量的名字為_。
_ 是一個(gè)合法的標(biāo)識(shí)符,也可以作為一個(gè)有效的變量使用,但是定義成下劃線就是希望不要被使用,除非你明確的知道這個(gè)數(shù)據(jù)需要使用
實(shí)例:
注:
_ 是合法的標(biāo)識(shí)符,看到下劃線就知道這個(gè)變量就是不想被使用
_ 還是一種特殊變量: _ 表示前一次輸出; __ 表示倒數(shù)第二次輸出; ___ 表示倒數(shù)第三次輸出; _dh 目錄歷史; _oh 輸出歷史
總結(jié):
_ 這個(gè)變量本身無任何語義,沒有任何可讀性,所以不是用來給人使用的Python中很多庫,都使用這個(gè)變量,使用十分廣泛。請(qǐng)不要在不明確變量作用域的情況下,使用 _ 導(dǎo)致和庫中_ 沖突
練習(xí):
1、從lst = [1,(2,3,4),5]中,提取4出來
lst = [1,(2,3,4),5]
_,(*_,a),_ = lst
print(a)
2、環(huán)境變量JAVA_HOME=/usr/bin,返回環(huán)境變量名和路徑
key, _ , val = "JAVA_HOME=/usr/bin".partition('=')
#字符串分割:partition(sep) -> (head, sep, tail)
print(key)
print(val)
#運(yùn)行結(jié)果:
JAVA_HOME
/usr/bin
3、對(duì)列表[1, 9, 8, 5, 6, 7, 4, 3, 2]使用冒泡法排序,要求使用封裝和解構(gòu)來交互數(shù)據(jù)
lst = [1, 9, 8, 5, 6, 7, 4, 3, 2]
for i in range(9):
for j in range(8):
if lst[j] > lst[j+1]:
lst[j],lst[j+1] = lst[j+1],lst[j]
print(lst)
#結(jié)果
[1, 2, 3, 4, 5, 6, 7, 8, 9]
4、 lst = list(range(10)) # 這樣一個(gè)列表,取出第二個(gè)、第四個(gè)、倒數(shù)第二個(gè)
lst = list(range(10))
_,a,_,b,*_,c,_ = lst
print(a,b,c)
#結(jié)果
1 3 8