1. 程式人生 > >python中的組包與解包

python中的組包與解包

關於【組包與解包】:
組包:python直譯器自動將多個數據組裝到一個容器中
解包:將容器中的多個數據拆出來
組包: 直譯器把1,2,3自動組包成一個元組,然後賦值給a,a的型別就是元組型別的
  a = 1,2,3 # 相當於 a = (1,2,3)
  print(a) # (1, 2, 3)
  print(type(a)) # <class 'tuple'>#解包: 直譯器會自動對元組(1,2)進行 解包,然後把1賦值給m,把2賦值給n
  m,n,k = (1,2,3) # m=1,n=2,k=3
  print(m) # 1
  print(n) # 2
  print(k) # 3 

函式使用引數可以使函式變得更加通用,增加擴充套件性。引數的順序有講究,定義函式時,【形參順序】
def func(位置引數,可變位置引數,預設引數,可變關鍵字引數):
  pass

解包:func(*args,**kwargs) 與 func(args,kwargs)返回的資料不同,* 或者**具有解包的作用,*用來將普通引數元組解開,**用來將關鍵字引數字典解開。**kwargs只能在呼叫函式時使用。 

下面通過兩個小例子幫助理解
1.

def func1(*args ,**kwargs):
  print(args) # (10, 20) # ( (10, 20) , {'n': 30, 'm': 40})
  print(kwargs) # {'n': 30, 'm': 40}


def func2(* args ,** kwargs):

  #print(args) # (10, 20)
  #print(kwargs) # {'n': 30, 'm': 40}

  #解包:* args -> *(10,20)->10,20
  #解包:** kwargs -> **{'n': 30, 'm': 40}-> n=30,m=40
  #func1(args,kwargs) # func1( (10, 20) , {'n': 30, 'm': 40}) 結果為:((10, 20), {'n': 30, 'm': 40}) {}

  func1(*args,**kwargs) # func1( 10, 20 , n=30,m=40) 結果為:(10, 20) {'n': 30, 'm': 40}

func2(10,20,n=30,m=40) # func2((10,20), {'n': 30, 'm': 40})

2.

a = range(8)
print(*a) # 解包 0 1 2 3 4 5 6 7
b = [1,2,3]
print(*b) #1 2 3