天天看點

Python的星号(*)和雙星号(**)用法

①引言

在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

)

④擴充用法單星号變量執行個體

單星号變量不僅僅能夠用在函數的參數傳遞中,實際上對一個普通變量使用單星号字首,能夠将這個變量拆分成單個元素,請看下面的執行個體

Python的星号(*)和雙星号(**)用法

如果在變量前面使用單星号,實際上是對變量的一次拆解操作,将變量中單獨的元素拆解出來,

函數會将這些傳入的單個元素儲存成一個元組,這就是為什麼我們

print(x[0])

能夠提取第一個元素的原因.

清單是可以更改的,将清單拆分後傳入函數,嘗試在函數内部更改第一個元素的值,結果觸發了“TypeError”異常,不論傳入的參數的原始類型是什麼,four(*x)函數在*x的位置接受這些傳入的參數後,都會将其儲存成”元組”,而元組是不能改變的。

如果

傳入了一個字典元素,發現僅輸出了字典元素的鍵,并沒有包含值,實際上,單星号是無法讀取到字典中的值的,永遠隻會讀取到字典中的鍵,如果想讀取到字典中的值,需要使用雙星号

⑤擴充用法雙星号變量執行個體

我們使用單星号拆分了一個字典傳遞給函數,卻隻能得到字典的鍵,下面示範如何使用雙星号來獲得字典的值:

Python的星号(*)和雙星号(**)用法

 綠色 1)這裡儲存成元組

 Ps:注意,使用這種方法将字典傳入函數的時候,字典的鍵的命名要符合python變量的命名規則,通過上面的分析也不難看出,雙星号會将字典首先轉換成關鍵字參數的形式,就相當于将字典中的鍵作為變量命,如果鍵不符合變量命名規則,會抛出一個"TypeError"異常,大家可以嘗試着颠倒一下上面字典中的鍵和值,使用數字作為鍵,看看會出現什麼問題。

⑥在一個函數的接收參數中,同時出現"非關鍵字參數(位置參數)"和"關鍵字參數"時,可以使用一個單星号來分隔這兩種參數

Python的星号(*)和雙星号(**)用法

⑦要在一個函數中包含多種參數的組合,必須遵守這樣的順序:位置參數(必選參數),預設參數,單星号參數或星号分隔符,關鍵字參數,雙星号參數;

請看下面的執行個體