Noah的學習筆記之Python篇:
注:本文全原創,作者:Noah Zhang (http://www.cnblogs.com/noahzn/)
這次來聊聊Python中函數的“可變長參數”,在實際中經常會用到哦~
一、什么是“可變長參數”
“可變長參數”就是向一個函數傳入不定個數的參數。比如我寫一個函數:傳入一個學生參加各科目考試的成績,求平均分,如兩個學生分別傳入(92, 91, 88)和(88, 95),因為每個學生參加的考試個數不同,因此傳入的參數個數也就不同了,遇到這種情況,我們在定義函數的時候,可以使用“可變長參數”。
二、在定義函數時使用“可變長參數”
# 完整打印函數的可變參數 def func(*args, **kwargs): print(args) print(kwargs) func(1, 'hello', a=2, c='world') >>> (1, 'hello') {'a': 2, 'c': 'world'}
以上代碼定義了一個最簡單的分別接收兩種“可變長參數”的函數,一種是“非關鍵字參數”,數據結構為:元組(注:元組不能被修改);另一種是“關鍵字函數”,數據結構為:字典。
此時,我們就可以依次傳入數個非關鍵字參數和數個關鍵字參數,不能混搭傳入~我們可以用如下這段代碼依次打印出接收到的參數:
# 依次打印函數的可變參數 def func(*args, **kwargs): for arg in args: print('arg:', arg) for value in kwargs: print('%s:' % value, kwargs[value]) func(1, 'hello', a=2, c='world') >>> arg: 1 arg: hello a: 2 c: world
三、在調用函數時使用“可變長參數”
我們也可以在調用函數時傳入一個“可變長參數”,如下所示:
def func(name1, name2, name3): print('第一個人:%s' % name1) print('第二個人:%s' % name2) print('第三個人:%s' % name3) name_tuple1 = ('Mary', 'John', 'Jane') name_tuple2 = ('Rose', 'Mike') func(*name_tuple1) func('Luna', *name_tuple2) >>> 第一個人:Mary 第二個人:John 第三個人:Jane 第一個人:Luna 第二個人:Rose 第三個人:Mike
在這段代碼中,我定義func函數的參數個數為3,所以請確保在調用該函數時傳入的參數數量也是3喲~
四、實際應用
#:假設傳入一個班級的名字、班級所獲榮譽,以及各位任課老師的名字和年齡 def welcome(name, *args, **kwargs): print('%s共獲得了%d項榮譽,分別是:' % (name, len(args))) for i in range(len(args)): print('%d. %s' % (i+1, args[i])) age_sum = 0 # 年齡和 print('該班共有%d名老師,他們的名字和年齡如下:' % len(kwargs)) for value in kwargs: age_sum += kwargs[value] print('%s: %d歲' % (value, kwargs[value])) print('老師們的平均年齡是%.1f歲\n' % (age_sum/len(kwargs))) welcome('計算機1班', '校優秀班級', '最佳凝聚力', Mary=27, Peter=35, John=32) welcome('軟件2班', '上海市優秀班級', '校合唱比賽冠軍', '最佳凝聚力', Peter=34, Rose=28, Hans=33) >>> 計算機1班共獲得了2項榮譽,分別是: 1. 校優秀班級 2. 最佳凝聚力 該班共有3名老師,他們的名字和年齡如下: Peter: 35歲 John: 32歲 Mary: 27歲 老師們的平均年齡是31.3歲 軟件2班共獲得了3項榮譽,分別是: 1. 上海市優秀班級 2. 校合唱比賽冠軍 3. 最佳凝聚力 該班共有3名老師,他們的名字和年齡如下: Peter: 34歲 Rose: 28歲 Hans: 33歲 老師們的平均年齡是31.7歲
這個例子也是自己編的,能幫助大家理解主題內容就好~