Noah的学习笔记之Python篇:函数“可变长参数”
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岁
这个例子也是自己编的,能帮助大家理解主题内容就好~
Noah的学习笔记之Python篇:函数“可变长参数”的更多相关文章
- Noah的学习笔记之Python篇:命令行解析
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- Noah的学习笔记之Python篇:装饰器
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- python 函数可变长参数
python中的可变长参数有两种: 一种是非关键字参数(*元组),另一种是关键字参数(**字典) 非关键字可变长参数: """ 非关键字可变参数,一个星号作为元组传入函数 ...
- 0521Day03命名规范 Data函数 可变长参数 枚举类型
[重点] 命名规范 枚举类型 Date函数 可变长参数 pirnt,println 命名规范 1. 驼峰命名法:main,username,setUsername 用于变量.方法的命名 2. Pasc ...
- 在Python中使用可变长参数列表
函数定义 在函数定义中使用*args和**kwargs传递可变长参数. *args用作传递非命名键值可变长参数列表(位置参数); **kwargs用作传递键值可变长参数列表 函数调用 在调用函数时,使 ...
- [转]深度探索C语言函数可变长参数
转自:http://www.cnblogs.com/chinazhangjie/archive/2012/08/18/2645475.html 一.基础部分 1.1 什么是可变长参数 可变长参数:顾名 ...
- C++ 系列:函数可变长参数
一.基础部分 1.1 什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf ...
- python中非关键字可变长参数和关键字变量参数的区别
#非关键字可变长参数 def add(*arg): return type(arg) print add() #打印结果 <type 'tuple'> #关键字变量参数 def ab ...
- Python学习笔记之基础篇(-)python介绍与安装
Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...
随机推荐
- 【JAVA - SSM】之MyBatis的ParameterType的使用
在MyBatis的Mapper.xml文件中,参数的表示方法有两种:一种是使用 "#{XXX}" 的方式表示的,另一种是使用 "${XXX}" 的方式表示的.今 ...
- wxPython中添加窗口标题图标
这种添加方法可以避免要将应用程序和图标放在同一个目录,可以实现从模块中读取图标 #用于从module中读取ico,避免了要在程序所在路径附上此ico exeName = win32api.GetMod ...
- 创业公司求IOS、Android攻城狮一枚
地点:北京CBD附近(地铁1号线大望路) 魅力值:送珍贵期权 你要会: 1. IOS或者Android开发 2.可以处理类似微视/秒拍的视频录制功能 3.熟悉jso ...
- POJ 3614 Sunscreen 优先队列 贪心
题意 有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉. 而刚开始的阳光的强度非常大,奶牛都承受不住 ...
- HDU2019JAVA
数列有序! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- android开发之手势识别
由于精确度等原因,手势识别在android中用的并不多,不过这并不妨碍我们来玩玩这个神奇的玩意. 在android中要使用手势,先得建立手势库,建立手势库非常简单,新建一个android sample ...
- Android(java)学习笔记168:Java异常分类
Java异常可分为3种: (1)编译时异常:Java.lang.Exception (2)运行期异常:Java.lang.RuntimeException (3)错误:Java.lang.Error
- jquery 提示信息显示后自动消失的具体实现
方法一: 复制代码 代码如下: $("#errormsg").html("您的信息输入错误,请重试!").show(300).delay(3000).hide( ...
- WEB 开发工具分享
有好用的工具 : 云盘链接地址:
- Java-hibernate的映射文件
Hibernate 需要知道怎样去加载(load)和存储(store)持久化类的对象.这正是 Hibernate 映 射文件发挥作用的地方.映射文件告诉 Hibernate 它应该访问数据库(data ...