首頁  >  文章  >  後端開發  >  Python中**和*參數有什麼用

Python中**和*參數有什麼用

silencement
silencement原創
2019-05-23 14:52:474909瀏覽

在Python中,「**」參數表示此處接受任意多個關鍵字參數,這些參數以字典形式保存,即會被解釋為一個字典;「*」參數表示此處接受任意多個非關鍵字參數,這些參數將以數組形式保存,即會被解釋為一個元組。

Python中**和*參數有什麼用

python的參數傳遞機制具有值傳遞(int、float等值資料型別)和引用傳遞(以字典、列表等非值物件資料型別為代表)兩種基本機制以及方便的關鍵字傳遞特性(直接使用函數的形參名指定實參的傳遞目標,如函數定義為def f(a,b,c),那麼在呼叫時可以採用f( b=1,c=2,a=3)的指定形參目標的傳遞方式,而不必拘泥於c語言之類的形參和實參按位置對應)除此之外,python中還允許包裹方式的參數傳遞,這為不確定參數個數和參數類型的函數呼叫提供了基礎。

例如:def f(*a,**b),包裹參數傳遞的實現是在定義函數時在形參前面加上*或**,*所對應的形參(如上面的a)會被解釋為一個元組(tuple,而**所對應的形參(如上面的b)會被解釋為一個字典。具體調用時參數的傳遞見下面的代碼:

Python中**和*參數有什麼用

#上面程式碼的運行結果是:

(3, 4)
{'n': 2, 'm': 1}
可見,對於不使用關鍵字傳遞的變量,會被作為元組的一部分傳遞給*a,而使用關鍵字傳遞的變數作為字典的一部分傳遞給了**b。

同時有個tricky的地方, python中規定非關鍵字傳遞的變數必須寫在關鍵字傳遞變數的前面,所以混合使用*和**時肯定時*形參在**形參的前面。

此外,在進行函數呼叫時,與之配套的就有個被稱為解包裹的方式:

Python中**和*參數有什麼用

#上面程式碼的輸出與前面一致。

把元組或字典作為參數傳入時,如果要適配包裹形式的形參定義(如上面將h傳給*a,k傳給**b),按照元組用*,字典用**的方式“解包裹」傳遞即可。

實際上,在呼叫f時使用*,是為了提醒Python:我想要把實參h拆成分散的2個元素c和d,進行分別傳遞(所有上面程式碼中的f定義成def f(arg1,arg2,**b)也是可以的,這樣arg1會得到3這個值而arg2會得到4這個值)。**同理類似。另外,解包裹時*對於列表([]定義的為列表,()定義的為元組)也適用。

Python中**和*參數有什麼用

#

以上是Python中**和*參數有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn