python中的組包與解包
阿新 • • 發佈:2019-01-25
關於【組包與解包】:
組包: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