除了默認(rèn)參數(shù),Python函數(shù)還接收一種參數(shù)叫做可變參數(shù),可變參數(shù)即任意個(gè)參數(shù)的意思,可變參數(shù)通常使用*args
來表示。
def func(*args): print('args length = {}, args = {}'.format(len(args), args)) func('a') # ==> args length = 1, args = ('a',) func('a', 'b') # ==> args length = 2, args = ('a', 'b') func('a', 'b', 'c') # ==> args length = 3, args = ('a', 'b', 'c')
注意,在使用上,Python會(huì)把可變參數(shù)定義為一個(gè)tuple,所以在函數(shù)內(nèi)部,把可變參數(shù)當(dāng)作tuple來使用就可以了,比如可以通過位置下標(biāo)取出對應(yīng)的元素等。
定義可變參數(shù)的目的也是為了簡化調(diào)用。假設(shè)我們要計(jì)算任意個(gè)數(shù)的平均值,就可以定義一個(gè)可變參數(shù):
def average(*args): sum = 0 for item in args: sum += item avg = sum / len(args) return avg
這樣,在調(diào)用的時(shí)候,我們就可以這樣寫:
average(1, 2) # ==> 1.5 average(1, 2, 2, 3, 4) # ==> 2.4 average() # 報(bào)錯(cuò) Traceback (most recent call last): ZeroDivisionError: division by zero
在執(zhí)行average()
的時(shí)候,卻報(bào)錯(cuò)了,這是因?yàn)樵谑褂每勺儏?shù)時(shí),沒有考慮周全導(dǎo)致的,因?yàn)榭勺儏?shù)的長度可能是0,當(dāng)長度為0的時(shí)候,就會(huì)出現(xiàn)除0錯(cuò)誤。因此需要添加保護(hù)的邏輯,這是同學(xué)在使用過程中需要特別注意的。
請完善average()函數(shù),使得當(dāng)可變參數(shù)長度為0的時(shí)候,也能正確返回結(jié)果。
參考答案:
def average(*args): sum = 0 if len(args) == 0: return sum for item in args: sum += item avg = sum / len(args) return avg
請驗(yàn)證,完成請求
由于請求次數(shù)過多,請先驗(yàn)證,完成再次請求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)