Noah的学习笔记之Python篇:

  1.装饰器

  2.函数“可变长参数”

  3.命令行解析

注:本文全原创,作者: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篇:函数“可变长参数”的更多相关文章

  1. Noah的学习笔记之Python篇:命令行解析

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  2. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  3. python 函数可变长参数

    python中的可变长参数有两种: 一种是非关键字参数(*元组),另一种是关键字参数(**字典) 非关键字可变长参数: """ 非关键字可变参数,一个星号作为元组传入函数 ...

  4. 0521Day03命名规范 Data函数 可变长参数 枚举类型

    [重点] 命名规范 枚举类型 Date函数 可变长参数 pirnt,println 命名规范 1. 驼峰命名法:main,username,setUsername 用于变量.方法的命名 2. Pasc ...

  5. 在Python中使用可变长参数列表

    函数定义 在函数定义中使用*args和**kwargs传递可变长参数. *args用作传递非命名键值可变长参数列表(位置参数); **kwargs用作传递键值可变长参数列表 函数调用 在调用函数时,使 ...

  6. [转]深度探索C语言函数可变长参数

    转自:http://www.cnblogs.com/chinazhangjie/archive/2012/08/18/2645475.html 一.基础部分 1.1 什么是可变长参数 可变长参数:顾名 ...

  7. C++ 系列:函数可变长参数

    一.基础部分 1.1 什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf ...

  8. python中非关键字可变长参数和关键字变量参数的区别

    #非关键字可变长参数 def add(*arg):    return type(arg) print add() #打印结果 <type 'tuple'> #关键字变量参数 def ab ...

  9. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

随机推荐

  1. 【转】Cannot change version of project facet Dynamic Web Module to 3.1 (Eclipse Maven唯一解决方案)

    If you want to use version 3.1 you need to use the following schema: http://xmlns.jcp.org/xml/ns/jav ...

  2. oracle分组查询

    分组函数 在分组函数中,如果有一个查找项分组,其他项必须也分组,比如下面的语句会报错,因为sal分组了,而ename没有分组: 1.显示工资最高的员工: 2.显示所有员工的平均工资: 2.1使用系统函 ...

  3. Android(java)学习笔记168:Java异常分类

    Java异常可分为3种: (1)编译时异常:Java.lang.Exception (2)运行期异常:Java.lang.RuntimeException (3)错误:Java.lang.Error

  4. RHEL7虚拟机中不重启的情况下加新硬盘及扩展根分区容量

    在VMware中添加一块新的5G硬盘 显示当前分区 # fdisk -l 通常在你在虚拟机中添加一块新硬盘时,你可能会看到新硬盘没有自动加载.这是因为连接到硬盘的SCSI总线需要重新扫描来使得新硬盘可 ...

  5. 码表 Unicode GBK UTF8 示例

    Unicode的编码形式与对应的字符串相互转换 /**  * Unicode的编码形式与对应的字符串相互转换  * @author 白乾涛  */ public class UnicodeUtils  ...

  6. jar打包通过exe4j转换成exe文件

    去年的时候有用过,最近写java的时候偶然用到,mark一下,方便以后看 下载链接后面附上 首先我们在eclipse上打包成jar文件,我这里只把简单的截图贴出来,详细的可以自行百度 打包jar文件: ...

  7. 【原创教程】一、Angular教程系列之认识angular

    为什么我会准备写这个原创教程系列? 写下这个标题之后,看着屏幕上空白的内容区,不知从何下手,想说的似乎有很多,似乎又没啥说的.有时候就会陷入这种矛盾中,有时候就是这样,于是,我下定决心这一次一定要把这 ...

  8. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

  9. WisDom.Net 框架设计(四) 用户安全

    WisDom.Net  ----用户安全 1.用户单机登录 正如其名这里要求其实就是显示用户只能在一台电脑上登录.防止多处登录,这里简单的说一下实现原理,我们在这里使用session +cookie ...

  10. (转)C# 中的委托和事件

    来源:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-In-CSharp.aspx 引言 委托 和 事件在 .Net ...