函數(shù)參數(shù)是需要傳遞給函數(shù)內(nèi)部的數(shù)據(jù),在前面,我們已經(jīng)簡(jiǎn)單接觸了函數(shù)的參數(shù),現(xiàn)在我們正式來(lái)認(rèn)識(shí)它。
函數(shù)參數(shù)可以是任意的數(shù)據(jù)類型,只要函數(shù)內(nèi)部邏輯可以處理即可。
def print_param(param): print(param)
對(duì)于print_param函數(shù),由于函數(shù)的邏輯是直接打印參數(shù),并沒(méi)有做任何別的邏輯,所以這個(gè)函數(shù)可以接受整數(shù)、浮點(diǎn)數(shù)、list、tuple、dict等等的數(shù)據(jù)類型。
print_param(1) print_param('3.1415926') print_param([1, 2, 3, 4, 5])
但是,有時(shí)候由于函數(shù)的實(shí)現(xiàn)關(guān)系,需要特定的參數(shù),就比如前面實(shí)現(xiàn)的求絕對(duì)值的函數(shù)my_abs(),如果傳遞一個(gè)字符串,就會(huì)引起錯(cuò)誤。
def my_abs(x): if x >= 0: return x else: return -x my_abs('str param') # 報(bào)錯(cuò) TypeError: '>=' not supported between instances of 'str' and 'int'
為了保證函數(shù)的正常運(yùn)行,有時(shí)候需要對(duì)函數(shù)入?yún)⑦M(jìn)行類型的校驗(yàn),Python提供isinstance()函數(shù),可以判斷參數(shù)類型,它接收兩個(gè)參數(shù),第一個(gè)是需要判斷的參數(shù),第二個(gè)是類型。
isinstance(100, int) # ==> True isinstance(100.0, int) # ==> False isinstance('3.1415926', str) # ==> True
有了isinstance,就可以優(yōu)化my_abs函數(shù),不在里面運(yùn)行出錯(cuò)了。
def my_abs(x): if not isinstance(x, int) or not isinstance(x, float): print('param type error.') return None if x >= 0: return x else: return -x
請(qǐng)實(shí)現(xiàn)函數(shù)func,當(dāng)參數(shù)類型為list時(shí),返回list中所有數(shù)字類型元素的和,當(dāng)參數(shù)類型為tuple時(shí),返回tuple中所有數(shù)字類型元素的乘積。
參考答案:
def func(param): if isinstance(param, list): result = 0 for item in param: if isinstance(item, int) or isinstance(item, float): result += item return result elif isinstance(param, tuple): result = 1 for item in param: if isinstance(item, int) or isinstance(item, float): result *= item return result return None
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開(kāi)微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書(shū)簽
舉報(bào)