python函數的動態參數之一個星號和兩個星號


一、概述

1、前文已經提過位置參數、默認參數,這兩種是最常用的參數。

2、動態參數即不限定參數個數,以一種動態的方式接受傳參的個數。

3、python的動態參數有兩種,分別是 ‘ *args ’  和 ‘ **kwargs ’ 。他們區別在於是一個星號還是兩個星號,而不是 args 和kwargs  ,實際上定義成 ‘ *cat ’ 和 ‘ **dog’ 也是可以的,只是按照約定俗稱的寫法,通常寫成  ‘ *args ’  和 ‘ **kwargs ’。

4、注意:動態參數必須放在所有位置參數和默認參數后面!

二、一個星號

1、一個星號的動態參數表示接收任意個參數,調用時會將實際參數打包成一個元組傳入。如果參數是個列表,則會將整個列表當成一個參數傳入。

 

 如圖所示,動態參數傳入的4,5,6會被打包成一個元組傳入到函數內部。

2、如果當傳入的動態參數是一個列表,則會將整個列表當成一個參數傳入。

 

 如圖,傳入的[4,5,6]被當成元組的中的一個元素傳入了。如果想把列表也當成當個元素逐個傳入呢?可以使用*傳參!如下圖所示。

 

 在傳參是添加一個*,就可將列表中的元素逐個傳入。實際上所有序列類型的元素都可以是用這種方式傳遞,比如字符串、元組、字典等。

3、一個星號的特殊情況!

當一個星號的動態參數位於n個默認參數后面時,python會自動將一個星號的動態參數的前n個賦值為默認參數。

 

 

如圖所示,默認將動態參數的4,5賦值給了c、d,這是python內部的傳參規則。

 

三、兩個星號

1、兩個星號的動態參數,會將傳入的參數打包成字典傳給函數

 

 2、而如果當傳入的動態參數是一個字典時,程序會報錯。為了解決這個問題,可以使用兩個*將字典值逐個傳入

 

 3、兩個星號的動態參數必須置於一個星號動態參數的后面!

 

四、萬能參數 & 關鍵字參數

1、一個星號的動態參數  + 兩個星號的動態參數 = 萬能參數!

2、萬能參數可能不受參數的個數限制,在靈活的同時也帶了一些麻煩。

例如,我們在招聘的時候要求必須傳入‘age’這個參數,就可以使用關鍵字參數進行限定。關鍵字參數使用 * 進行區別,即 * 號后面的內容都是關鍵字參數

 

注意 :關鍵參數在調用時必須船用參數名稱。

3、對於動態參數里面的關鍵參數,不需要加 * ,直接在動態參數后面限定即可。

 

 

 

 注意:關鍵參數必須要傳,但是可以穿空缺值。下面這種方式可以。

 

 但下面這種方式就會報錯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM