**和*常常用於參數傳遞中的打包和解包,對函數傳遞的參數進行打包(打包成元組tuple或字典dictionary)和拆解(分解成單個元素),其中元組tuple的打包和解包使用單星號,字典dictionary的打包和拆解使用雙星號
1.打包
打包就是將傳遞給函數的任意多個非關鍵字參數/關鍵字參數打包成一個元組或字典(元組只能接收非關鍵字參數,字典只能接收關鍵字參數)
打包tuple:
def pack(a, *b):
print type(a), a
print type(b), b
pack(1, 2, 3, 4, 5)
輸出結果:
<type 'int'> 1
<type 'tuple'> (2, 3, 4, 5)
def pack(a, **b):
print type(a), a
print type(b), b
pack(1, a1=2, a2=3)
輸出結果如下:
<type 'int'> 1
<type 'dict'> {'a1': 2, 'a2': 3}
2.拆解
拆解就是將傳遞給函數的一個列表,元組或者字典拆分成獨立的多個元素,然後賦值給函數中的參變量.在拆解字典時,有兩種拆解方法,第一種使用*拆解,解出來傳遞給函數的只有鍵值key,第二種使用**拆解,解出來的是字典的每一項.
def pack(a, b, *c):
print type(a), a
print type(b), b
print type(c), c
score = [1.0, 2.0, 3.0, 4.0]
pack(*score)
<type 'float'> 1.0
<type 'float'> 2.0
<type 'tuple'> (3.0, 4.0)
def pack(*c):
print type(c), c
student = {'score' : 1.0, 'id' : 2, 'name' : 'xiaoxiao'}
pack(*student)
<type 'tuple'> ('score', 'id', 'name')
def pack(*a, **b):
print type(a), a
print type(b), b
age = [1, 2, 3]
student = {'score' : 1.0, 'id' : 2, 'name' : 'xiaoxiao'}
pack(*age, **student)
<type 'tuple'> (1, 2, 3)
<type 'dict'> {'score': 1.0, 'id': 2, 'name': 'xiaoxiao'}