封裝
- 將多個值使用逗號分割,組合在一起
- 本質上,返回一個元組,只是省略了小括號
- python的特有的語法,被很多語言學習借鑒
t1 = (1,2) #定義元組 t2 = 1,2 #將1和2封裝成元組 type(t1) type(t2)
舉例:
a = 4 b = 5 temp = a a = b b = temp #等價於 a,b = b,a #右邊使用了封裝,左邊使用了解構
解構
- 把線性結構的元素解開,並順序的賦給其他變量
- 左邊接納的變量數要和右邊解開的元素個數一致
舉例
lst = [3, 5] first, second = lst print(first, second)
其他舉例:
a,b = 1,2 #正常的封裝解構a,b = (1,2) #元組的封裝解構a,b = [1,2] #列表的封裝解構a,b = {10,20} #set的封裝解構a,b = {'a':10,'b':20} # 非線性結構也可以解構 a,b = {10,20,30}a,*b = {10,20,30} #*b 可以接受剩下的所有值,並生產個列表[a,b] = (1,2) [a,b] = 10,20(a,b) = {30,40}
- 使用*變量名接收,但不能單獨使用
- 被*變量名 收集后組成一個列表
舉例:
lst = list(range(1, 21, 2)) head, *mid, tail = lst #執行結果1 [3, 5, 7, 9, 11, 13, 15, 17] 19 *lst2 = lst #不能單獨使用 *body, tail = lst #執行結果 [1, 3, 5, 7, 9, 11, 13, 15, 17] 19 head, *tail = lst #執行結果 1 [3, 5, 7, 9, 11, 13, 15, 17, 19] head, *m1, *m2, tail = lst #只能有一個*變量名 head, *mid, tail = "abcdefghijklmn" #執行結果 a ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'] n type(mid) #mid 類型是列表 list
丟棄變量
- 這是一個慣例,是一個不成文的規定,不是標准
- 如果不關心一個變量,就可以定義變量的名字為_
- _是一個合法的標識符,也可以作為一個有效的變量使用,但是定義成下划線就是希望不要被使用,除非你明確的知道這個數據需要使用
舉例:
lst = [9,8,7,20] first, *second = lst head, *_, tail = lst print(head) print(tail)
#_是合法的標識符,看到下划線就知道這個變量就是不想被使用
print(_)
總結
- _這個變量本身無任何語義,沒有任何可讀性,所以不是用來給人用的
- Python中很多庫,都使用這個變量,使用十分廣泛,請不要在不明確變量作用域的情況下使用_導致和庫中的沖突
練習
1、從lst = [1,(2,3,4),5]中,提取4出來
lst = [1,(2,3,4),5] _,(*_,val),*_ = lst print(val)
2、環境變量JAVA_HOME=/usr/bin,返回變量名和路徑
key,_,val = "JAVA_HOME=/usr/bin".partition("=") print(key,val)