Python可變長參數(shù)

引言

假如我們已經(jīng)從Excel中讀取到了一列數(shù)據(jù),比如說是一隊人的分?jǐn)?shù)。我們嘗試用Python來編寫一個求總分的函數(shù)。

如果事先已知人數(shù)

如果人數(shù)實現(xiàn)已知,比如說只有兩個人的時候,我們可能會編寫如下函數(shù):

def sum1(a,b):
    print('a = ',a)
    print('b = ',b)
    print('sum = ',a+b)
    
# a = 10
# sum1(a) # TypeError: sum1() missing 1 required positional argument: 'b'
# b = 20
# sum1(a,b)

這個函數(shù)的級別等同“hello world“。讓我們來看下這個函數(shù)的參數(shù)。這個函數(shù)的這種參數(shù)稱為必選參數(shù)。也就是活,你必須給函數(shù)sum1傳遞兩個確定的參數(shù),他才能輸出正確結(jié)果。如果你只傳遞了一個,對不起,函數(shù)撂挑子不干了。而且會給你拽一句英文:

TypeError: sum1() missing 1 required positional argument: 'b'。

這里寫圖片描述

如果某人分?jǐn)?shù)也已知

標(biāo)題中”也“的意思是說,人數(shù)已知的同時某人分?jǐn)?shù)也已知,比如為10。這時候也許你會編寫出下面這樣的函數(shù):

def sum2(a,b=10):
    print('a = ',a)
    print('b = ',b)
    print('sum = ',a+b)

這個時候,再遇到上一節(jié)的只傳遞一個函數(shù)的情況,函數(shù)就不會撂挑子了,而是會給出正確結(jié)果。

但是,轉(zhuǎn)折來了:一般情況下,我們很有可能不知道我們到底從excel讀取了多少個數(shù)據(jù),而且一般數(shù)量還還不小,即使知道了也不能用上面的方式去寫了。論括號里到底可以寫多少個參數(shù)??

可變長參數(shù)

當(dāng)函數(shù)參數(shù)不可知的時候,也許,就需要寫一個可變長參數(shù)的函數(shù)了。

在Python中,有兩種可變長常數(shù)可選,分別是:

  • 元組變長參數(shù),參數(shù)名前面有一個*
  • 字典變長參數(shù),參數(shù)名前面有兩個*

我們分別來看一下。

元組變長參數(shù)

我們用元組變長參數(shù)重寫一個上面的那個求總分的函數(shù):

def sum3(*nums):
    print('nums: ',nums)

    sum = 0
    for num in nums:
        sum += num

    print('sum = ',sum)
    
a = 11
b = 22
c = 33
sum3(a,b,c)

運行下試試,結(jié)果如下:

nums:  (11, 22, 33)
sum =  66

可以看到輸出的nums是被圓括號包含的三個數(shù)字,大家都知道,在Python中圓括號括起來的正是元組tuple(圓括號,元組......感覺名字還挺符合的,都是yuan)。

不定長參數(shù),沒有參數(shù)可不可以呢?

運行sum()試試看。

輸出結(jié)果:

nums:  ()
sum =  0

字典可變長參數(shù)

我們用字典變長參數(shù)重寫一個上面的那個求總分的函數(shù):

def sum4(a=0,**nums):
    print('nums: ',nums)

    sum = a
    for key in nums:
        sum += nums[key]

    print('sum = ',sum)
    
sum4(a=11,b=22,c=33)

運行一下,輸出結(jié)果如下:

a =  11
nums:  {'b': 22, 'c': 33}
sum =  66

可以看到輸出的nums是被花括號包含的三個數(shù)字,大家都知道,在Python中花括號括起來的正是字典。

字典可變長參數(shù),或者叫關(guān)鍵字參數(shù),允許你將不定長度的鍵值對, 作為參數(shù)傳遞給一個函數(shù)。

當(dāng)然,與元組可變參數(shù)一樣,這個參數(shù)也是可以為空的。

如果我們按照元組可變長參數(shù)的方式給sum4傳遞參數(shù)會發(fā)生什么呢?

比如我們運行下這么一句:

sum4(a,b,c)

結(jié)果函數(shù)又撂挑子不干了,而且對你說了一句英語:

TypeError: sum4() takes from 0 to 1 positional arguments but 3 were given。

這里寫圖片描述

公眾號【CVPy】,分享有意思的干貨。


這里寫圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容