python封裝和解構


封裝

  • 將多個值使用逗號分割,組合在一起
  • 本質上,返回一個元組,只是省略了小括號
  • 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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM