當前位置:成語大全網 - 新華字典 - Python的位置參數、默認參數、關鍵字參數、可變參數區別

Python的位置參數、默認參數、關鍵字參數、可變參數區別

對於python函數參數,對於初學者可能就是進入了迷宮,盡管我也是初學者,簡單總結壹下。

說參數之前,先講壹下兩個packing(包裹)和unpacking(解包裹):

輸出:

我總結不了這個概念,只能幫大家到這了

壹、位置參數和關鍵字參數:

調用函數時根據函數定義的參數位置來傳遞參數。

註意:

有位置參數時,位置參數必須在關鍵字參數的前面,但關鍵字參數之間不存在先後順序的

二、默認參數:

用於定義函數,為參數提供默認值,調用函數時可傳可不傳該默認參數的值(註意:所有位置參數必須出現在默認參數前,包括函數定義和調用)

三、可變參數:

定義函數時,有時候我們不確定調用的時候會傳遞多少個參數(不傳參也可以)。此時,可用包裹(packing)位置參數,或者包裹關鍵字參數,來進行參數傳遞,會顯得非常方便。

1、包裹位置傳遞

我們傳進的所有參數都會被args變量收集,它會根據傳進參數的位置合並為壹個元組(tuple),args是元組類型,這就是包位置傳遞。

2、包裹關鍵字傳遞

kargs是壹個字典(dict),收集所有關鍵字參數

四、解包裹參數:

*args 和 **kargs ,也可以在函數調用的時候使用,稱之為解包(unpacking)

1、在傳遞元組時,讓元組的每壹個元素對應壹個位置參數

2、在傳遞詞典字典時,讓詞典的每個鍵值對作為壹個關鍵字參數傳遞給函數

五、位置參數、默認參數、可變參數的混合使用

1、基本原則是:先位置參數,默認參數,包裹位置,包裹關鍵字(定義和調用都應遵循)

2、Python中 *args 和 **kwargs 的區別

先看個demo:

輸出結果:

分析壹下:可以看到,這兩個是[Python]中的可變參數。 *args 表示任何多個無名參數,它是壹個tuple; **kwargs 表示關鍵字參數,它是壹個dict。並且同時使用 *args 和 **kwargs 時,必須 *args 參數列要在 **kwargs 前,否則會報語法錯誤!!!

還有個小應用場景:創建字典

其實python中就帶有dict類,使用dict(a=1,b=2,c=3)即可創建壹個字典了。

*args:

重點在*,後面的args相當於壹個變量名,可以自己定義的。它的本質就是將標準調用剩下的值集中轉變為元組。

從形參的角度:

從實參的角度:

從不同角度看**kwargs:

**kwargs與位置參數和默認參數混用:

超復雜混合參數混用記:

總結:

位置參數:

調用函數時所傳參數的位置必須與定義函數時參數的位置相同

關鍵字參數:

使用關鍵字參數會指定參數值賦給哪個形參,調用時所傳參數的位置可以任意

*位置參數:可接受任意數量的位置參數(元組);只能作為最後壹個位置參數出現,其後參數均為關鍵字參數

**關鍵字參數:可接受任意數量的關鍵字參數(字典);只能作為最後壹個參數出現