ZMAN的学习笔记之Python篇:
注:本文全原创,作者:ZMAN (http://www.cnblogs.com/zmanone/)
这次来聊聊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岁
这个例子也是自己编的,能帮助大家理解主题内容就好~