1. 程式人生 > 程式設計 >淺談python3打包與拆包在函式的應用詳解

淺談python3打包與拆包在函式的應用詳解

1、序列(拆包)

*用作序列拆包:*可對字串、列表、集合、元組、字典、數字元素等序列進行拆包

print(*(1,2,3,4,5,6))
#1 2 3 4 5 6
print(*[1,6])
#1 2 3 4 5 6

序列拆包賦值:

注意:*變數 不能在第一個位置,否則會報錯

a,b,*c = 0,1,3 #獲取剩餘部分
a,*b,c = 0,3 #獲取中間部分
a,1    
a,1

優先對位置變數賦值,再對拆包的賦值

#測試結果
print(a,c)
0 1 [2,3]
0 [1,2] 3
0 1 [] #優先滿足普通變數a、b的賦值
0 [] 1 #優先滿足普通變數a、c的賦值

瞭解了一些基礎的 * 拆包後我們現在來聊聊函式中的打包和拆包:

2、函式定義的多種形參(打包)

函式定義時多種形參的位置順序

函式形參順序為:def 函式名(【位置引數】,【*元組引數】,【預設引數=預設值】,【**字典引數】):

注意:形參裡面的 * 和 ** 的含義是打包

【位置引數】:最普通的形參,必須與實參一 一對齊
【 * 元組引數】:把字串、列表、集合、元組、字典、數字元素等序列打包成元組作為形參
【**字典引數】:把多個實參打包成字典作為形參
【預設引數=預設值】:函式呼叫時沒有傳入時用預設值,傳入時用傳入值

def 函式名(a,c=3,**d):
  print("a:",a) 
  print('b:',b) 
  print('c:',c)
  print('d:',d)
# *元組引數只接受單一的值,而**字典引數是進行接收鍵值對
函式名(1,6,7,name="小明",age=18,sex="男")

#輸出結果:
a: 1
b: (2,7)
c: 3
d: {'name': '小明','age': 18,'sex': '男'}

3、函式呼叫時的實參(拆包)

def tk(c,d,e,f,g): #d,g分別接收 1 2 3 4
  print(c)
  print(d,g)
a=[1,4]
b={1,4}
tk(a,*b) # *b將集合拆解為數字元素序列 1 2 3 4

執行結果:
[1,4]
1 2 3 4

補充:

使用命名引數可大大增強函式呼叫的靈活性(引數位置無需一 一對應,但引數名必須一 一對應)

淺談python3打包與拆包在函式的應用詳解

總結:預設引數與命名引數一樣,前者是形參,後者是實參**

讓我們結合實參和形參看一下在函式中打包與拆包

def tk(a,*b): #2、再將數字元素序列 1 2 3 4打包成元組(1,4)
  print(a)
  print(b)
a1=[1,4]
b1={1,4}
tk(a1,*b1)  #1、先將b1拆包成數字元素序列 1 2 3 4 再傳遞給元組形參*b

#輸出結果:
[1,4] #a1未打包
(1,4) #b1為打包後的元組

總結:函式形參和函式實參的*含義不一樣,前者是打包,後者是拆包

對單個值操作 對任意值操作
位置引數、預設引數、命名引數 *元組引數、 **字典引數

4、函式返回多值時的打包

接收函式返回值的兩種情況:

def 函式():
	return 返回值1 返回值2 返回值3
#1、當用一個變數接受多個返回值時,會打包成一個元組傳遞給變數
a=函式()
print(a)

#2、用與之數目對應的變數接受多個返回值
b,c,d=函式()
print(b,d)

#輸出結果
(返回值1,返回值2,返回值3) #打包成元組
返回值1 返回值2 返回值3

到此這篇關於淺談python3打包與拆包在函式的應用詳解的文章就介紹到這了,更多相關python3打包與拆包內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!