可變參數(shù)在使用上確實(shí)方便,函數(shù)會(huì)把可變參數(shù)當(dāng)作tuple去處理,tuple在使用上有一定的局限性,比如有時(shí)候想找到特定位置的參數(shù),只能通過(guò)下標(biāo)的方式去尋找,如果順序發(fā)生變化得時(shí)候,下標(biāo)就會(huì)失效,函數(shù)邏輯就得重新修改實(shí)現(xiàn)。
Python函數(shù)提供可變關(guān)鍵字參數(shù),對(duì)于可變關(guān)鍵字參數(shù),可以通過(guò)關(guān)鍵字的名字key找到對(duì)應(yīng)的參數(shù)值,想想這和我們之前學(xué)習(xí)過(guò)的什么類似?是的沒(méi)錯(cuò),dict,Python會(huì)把可變關(guān)鍵字參數(shù)當(dāng)作dict去處理;對(duì)于可變關(guān)鍵字參數(shù),一般使用**kwargs來(lái)表示。
例如,想要打印一個(gè)同學(xué)的信息,可以這樣處理:
def info(**kwargs): print('name: {}, gender: {}, age: {}'.format(kwargs.get('name'), kwargs.get('gender'), kwargs.get('age'))) info(name = 'Alice', gender = 'girl', age = 16)
對(duì)于一個(gè)擁有必需參數(shù),默認(rèn)參數(shù),可變參數(shù),可變關(guān)鍵字參數(shù)的函數(shù),定義順序是這樣的:
def func(param1, param2, param3 = None, *args, **kwargs): print(param1) print(param2) print(param3) print(args) print(kwargs) func(100, 200, 300, 400, 500, name = 'Alice', score = 100) # ==> 100 # ==> 200 # ==> 300 # ==> (400, 500) # ==> {'name': 'Alice', 'score': 100}
當(dāng)然,這么多類型的參數(shù),很容易導(dǎo)致出錯(cuò),在實(shí)際使用上,不建議定義這么多的參數(shù)。
編寫一個(gè)函數(shù),它接受關(guān)鍵字參數(shù)names,gender,age三個(gè)list,分別包含同學(xué)的名字、性別和年齡,請(qǐng)分別把每個(gè)同學(xué)的名字、性別和年齡打印出來(lái)。
參考答案:
def info(**kwargs): names = kwargs['names'] gender_list = kwargs['gender'] age_list = kwargs['age'] index = 0 for name in names: gender = gender_list[index] age = age_list[index] print('name: {}, gender: {}, age: {}'.format(name, gender, age)) index += 1 info(names = ['Alice', 'Bob', 'Candy'], gender = ['girl', 'boy', 'girl'], age = [16, 17, 15])
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開(kāi)微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)