PYTHON星號的特殊的用法,「在變量前添加單個星號或兩個星號」,實現多參數的傳入或變量的拆解,本文將詳細介紹。python
最初,星號變量是用在函數的參數傳遞上的,在下面的實例中,單個星號表明這個位置接收任意多個非關鍵字參數,在函數的*b位置上將其轉化成元組,而雙星號表明這個位置接收任意多個關鍵字參數,在**b位置上將其轉化成字典:函數
* 該位置接受任意多個非關鍵字(non-keyword)參數,在函數中將其轉化爲元組(1,2,3,4)spa
** 該位置接受任意多個關鍵字(keyword)參數,在函數**位置上轉化爲詞典 [key:value, key:value ]code
#!/usr/bin/env python #coding=utf-8 #-------- def one(a,*b): """a是一個普通傳入參數,*b是一個非關鍵字星號參數""" print(b) one(1,2,3,4,5,6) #-------- def two(a=1,**b): """a是一個普通關鍵字參數,**b是一個關鍵字雙星號參數""" print(b) two(a=1,b=2,c=3,d=4,e=5,f=6)
輸出爲:utf-8
# 第一個輸出爲: (2, 3, 4, 5, 6) # 第二個輸出爲: {'b': 2, 'c': 3, 'e': 5, 'f': 6, 'd': 4}
從輸出中能夠看到,第一個函數中,*b的位置能夠傳入任意多沒有關鍵字的參數,*b會將這些傳入參數轉化成一個元組,下面的調用class
其中,第一個的輸入能夠理解爲:變量
one(1,2,3,4,5,6)coding
傳入後,等價於:方法
one(1,(2,3,4,5,6))命名
第二個函數中,**b的位置能夠接收任意多個關鍵字參數,下面的調用
two(a=1,b=2,c=3,d=4,e=5,f=6)
傳入到 one(a,*b)中,等價於:
two(a=1,{'b': 2, 'c': 3, 'e': 5, 'f': 6, 'd': 4})
單星號(*)的其它做用:
單星號變量不單單可以用在函數的參數傳遞中,實際上對一個普通變量使用單星號前綴,可以將這個變量拆分紅單個元素。
#若是在變量前面使用單星號,其實是對變量的一次拆解操做,將變量中單獨的元素拆解出來,而後依次傳入one()函數
而傳入one()函數後,one()函數會將這些傳入的單個元素保存成一個元組,這就是爲何咱們 print(x[0])可以提取第一個元素的緣由
變量在傳入到單星號變量函數中時,會將變量自動轉化爲元組,而元組是不能改變的。
另外,單星號是沒法讀取到字典中的值的,永遠只會讀取到字典中的鍵(key),若是想讀取到字典中的值,須要使用雙星號(**)
雙星號能夠用來得到字典的值
須要注意的是:
使用這種方法將字典傳入函數的時候,字典的鍵的命名要符合python變量的命名規則,經過上面的分析也不難看出,雙星號會將字典首先轉換成關鍵字參數的形式,就至關於使用字典中的鍵做爲變量名,若是鍵不符合變量命名規則,則會拋出一個"TypeError"異常。