①引言
在Python中,星号除了用于乘法數值運算和幂運算外,還有一種特殊的用法是在變量前加單個星号或兩個星号,實作多參數的傳人或變量的拆解。
②什麼是星号變量
最初,星号變量是用在函數的參數傳遞上的,在下面的執行個體中,單個星号代表這個位置接受任意多個非關鍵字參數,在函數的*b位置上将其轉化成元組,
def one(a,*b):
"""a是一個普通傳入參數,*b是一個非關鍵字星号參數"""
print(b)
one(1,2,3,4,5,6)
out:(2,3,4,5,6)
③雙星号代表這個位置接收任意多個關鍵字參數,在**b位置上将其轉化成字典:
def two(a=1,**b):
"""a是一個普通關鍵字參數,**b是一個關鍵字雙星号參數"""
print(b)
two(a=1,b=2,c=3,d=4,e=5,f=6)
out:t
wo(a
=
1
,b
=
2
,c
=
3
,d
=
4
,e
=
5
,f
=
6
)
④擴充用法單星号變量執行個體
單星号變量不僅僅能夠用在函數的參數傳遞中,實際上對一個普通變量使用單星号字首,能夠将這個變量拆分成單個元素,請看下面的執行個體
如果在變量前面使用單星号,實際上是對變量的一次拆解操作,将變量中單獨的元素拆解出來,
函數會将這些傳入的單個元素儲存成一個元組,這就是為什麼我們
print(x[0])
能夠提取第一個元素的原因.
清單是可以更改的,将清單拆分後傳入函數,嘗試在函數内部更改第一個元素的值,結果觸發了“TypeError”異常,不論傳入的參數的原始類型是什麼,four(*x)函數在*x的位置接受這些傳入的參數後,都會将其儲存成”元組”,而元組是不能改變的。
如果
傳入了一個字典元素,發現僅輸出了字典元素的鍵,并沒有包含值,實際上,單星号是無法讀取到字典中的值的,永遠隻會讀取到字典中的鍵,如果想讀取到字典中的值,需要使用雙星号
⑤擴充用法雙星号變量執行個體
我們使用單星号拆分了一個字典傳遞給函數,卻隻能得到字典的鍵,下面示範如何使用雙星号來獲得字典的值:
綠色 1)這裡儲存成元組
Ps:注意,使用這種方法将字典傳入函數的時候,字典的鍵的命名要符合python變量的命名規則,通過上面的分析也不難看出,雙星号會将字典首先轉換成關鍵字參數的形式,就相當于将字典中的鍵作為變量命,如果鍵不符合變量命名規則,會抛出一個"TypeError"異常,大家可以嘗試着颠倒一下上面字典中的鍵和值,使用數字作為鍵,看看會出現什麼問題。
⑥在一個函數的接收參數中,同時出現"非關鍵字參數(位置參數)"和"關鍵字參數"時,可以使用一個單星号來分隔這兩種參數
⑦要在一個函數中包含多種參數的組合,必須遵守這樣的順序:位置參數(必選參數),預設參數,單星号參數或星号分隔符,關鍵字參數,雙星号參數;
請看下面的執行個體