更新時(shí)間:2022-09-06 來源:黑馬程序員 瀏覽量:
在Python中,通常在定義一個(gè)函數(shù)時(shí),若希望函數(shù)能夠處理的參數(shù)個(gè)數(shù)比當(dāng)初定義的參數(shù)個(gè)數(shù)多,此時(shí)可以在函數(shù)中使用不定長(zhǎng)參數(shù)。其基本的語法格式如下:
def 函數(shù)名([formal_args,] *args, **kwargs): "函數(shù)_文檔字符串" 函數(shù)體 return 表達(dá)式
在上述格式中,函數(shù)共有3個(gè)參數(shù)。其中,formal_args為形參(也就是前面所用的參數(shù),如a,b),*args和**kwargs為不定長(zhǎng)參數(shù)。當(dāng)調(diào)用函數(shù)的時(shí)候,函數(shù)傳入的參數(shù)個(gè)數(shù)會(huì)優(yōu)先匹配formal_args參數(shù)的個(gè)數(shù)。如果傳入的參數(shù)個(gè)數(shù)和formal_args參數(shù)的個(gè)數(shù)相同,不定長(zhǎng)參數(shù)會(huì)返回空的元組或字典;如果傳入?yún)?shù)的個(gè)數(shù)比formal_args參數(shù)的個(gè)數(shù)多,可以分為如下兩種情況:
(1)如果傳入的參數(shù)沒有指定名稱,那么*args會(huì)以元組的形式存放這些多余的參數(shù);
(2)如果傳入的參數(shù)指定了名稱,如m=1,那么**kwargs會(huì)以字典的形式存放這些被命名的參數(shù),如{m:1}
為了大家更好地理解,先通過一個(gè)簡(jiǎn)單的案例進(jìn)行演示,具體如例6-4所示。
例6-4 不定長(zhǎng)參數(shù)
def test(a, b, *args): print(a) print(b) print(args) test(11, 22)
在例6-4中,第1~4行代碼定義了帶有多個(gè)參數(shù)的test函數(shù)。其中,args為不定長(zhǎng)參數(shù)。第5行代碼調(diào)用test函數(shù)時(shí)只傳入了兩個(gè)參數(shù)11和22,說明11和22會(huì)按照從左向右的順序依次匹配test函數(shù)定義時(shí)的參數(shù)a和b,而args參數(shù)因?yàn)闆]有接收到數(shù)據(jù),所以其為一個(gè)空元祖。
程序的運(yùn)行結(jié)果如圖6-4所示。
圖6-4 運(yùn)行結(jié)果