python 中的參數順序
為了方便本文描述,將參數自定義為如下類型 【自定義 自定義 自定義 別糾結】
-
形參:
-
位置參數
-
默認參數
-
位置不定長
-
關鍵字不定長
-
-
實參:
-
位置實參
-
關鍵字實參
-
二、位置參數使用
def fn(a, b):
pass
-
a 和 b 為位置參數 形式的形參
-
調用時:
-
全部位置實參:
-
要求必須要 一 一對應
-
要求實參與形參數量必須對等
-
fn( 1, 2 )
-
-
全部關鍵字實參:
-
要求實參數量與形參需要對等
-
因為使用了關鍵字指定,順序可以自定義
-
fn(b=3, a=4)
-
-
位置+關鍵字實參:
-
要求數量對等
-
此時位置參數必須寫在關鍵字的前面
-
fn(1, b=4)
-
-
三、默認參數使用
def fn(a, b, c=3):
pass
-
a b 是位置的形參, c 是默認參數
-
定義時:
-
默認參數必須放置於位置參數後面,因為默認參數後只能放默認
-
-
調用時:
-
全部位置參數無默認值:
-
此時遵守位置參數規則即可,數量對等, 一 一對應
-
默認值參數走默認
-
fn(1,3)
-
-
全部位置參數有默認值
-
此時遵守位置參數必須先於關鍵字實參
-
fn(1,3,c=6) || fn(1, 3, 6)
-
-
全部關鍵字參數無默認值
-
此時遵守關鍵字參數規則,數量對等,可自定義順序
-
默認值參數走默認
-
fn(b=4, a=4)
-
-
全部關鍵字參數有默認值
-
此時遵守關鍵字參數規則,數量對等,可自定義順序
-
此時默認值只能通過關鍵字傳入
-
fn(b=6, c=4, a=1)
-
-
四、位置不定長 + 關鍵字不定長
不定長指的是實參數 個數不確定,希望函數可以接收用戶自義數量的實參
01 位置不定長**
-
定義時
-
函數定義時 設置 *args 形參,變量名可自定義
-
-
調用時
-
傳入一定數量的位置參數
-
此時會自動的生成元組 args ,存放所有的位置參數值
-
02 關鍵字不定長
-
定義時
-
函數定義時 設置 **kwargs 形參,變量名可自定義
-
-
調用時
-
傳入一定數量的關鍵字實參
-
自動生成字典存放關鍵字實參
-
五、參數位置及順序總結
上述不同形式的形式可同時出現,調用時 實參需要滿足對應的規律
01 定義時
-
如果只有位置+默認, 那麽默認一定放置於位置之後
-
如果位置不定長 + 默認,建議將默認放置於位置不定長前
-
def fn(default=3, *args):
pass
# 此時雖然 *args 可以放置在 default 的前面,但是調用時容易出錯
? -
如果位置不定長 + 關鍵字不定長 + 默認同時存在,建議如下
-
def fn(default=3, *args, **kwargs):
pass
?
# 此時 default 必須在 **kwargs 的前面,不然無法區分哪個是默認形參
?
02 調用時
如果定義時的順序敲定了,調用時實參按著形參的規則來走就可以
python 中的參數順序