python中運算符*和**的作用-參數傳遞

 

 

**和*常常用於參數傳遞中的打包和解包,對函數傳遞的參數進行打包(打包成元組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'}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章