可變參數在使用上確實方便,函數會把可變參數當作tuple去處理,tuple在使用上有一定的局限性,比如有時候想找到特定位置的參數,只能通過下標的方式去尋找,如果順序發生變化得時候,下標就會失效,函數邏輯就得重新修改實現。
Python函數提供可變關鍵字參數,對于可變關鍵字參數,可以通過關鍵字的名字key找到對應的參數值,想想這和我們之前學習過的什么類似?是的沒錯,dict,Python會把可變關鍵字參數當作dict去處理;對于可變關鍵字參數,一般使用**kwargs來表示。
例如,想要打印一個同學的信息,可以這樣處理:
def info(**kwargs): print('name: {}, gender: {}, age: {}'.format(kwargs.get('name'), kwargs.get('gender'), kwargs.get('age'))) info(name = 'Alice', gender = 'girl', age = 16)
對于一個擁有必需參數,默認參數,可變參數,可變關鍵字參數的函數,定義順序是這樣的:
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}
當然,這么多類型的參數,很容易導致出錯,在實際使用上,不建議定義這么多的參數。
編寫一個函數,它接受關鍵字參數names,gender,age三個list,分別包含同學的名字、性別和年齡,請分別把每個同學的名字、性別和年齡打印出來。
參考答案:
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])
請驗證,完成請求
由于請求次數過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報