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. 模板引擎 Velocity

    模板引擎 Velocity 一.Velocity简介: Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template langu ...

  2. [Javascript + rxjs] Using the map method with Observable

    Like an array, Observable has a map method that allows us to transform a sequence into a new Observa ...

  3. Java中PreparedStatement和Statement的用法区别(转)

    1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象.   2.作为 ...

  4. 查看源码Vim+Cscope

    http://blog.csdn.net/huiguixian/article/details/7044869

  5. Linux系统调优1

    Linux在进行系统调优的时候,首先要考虑整个操作系统的结构,然后针对各个部分进行优化,下面展示一个Linux系统的各个组成部分: 有上图可以看出,我们可以调整的有应用程序,库文件,内核,驱动,还有硬 ...

  6. Windows与Linux下文件操作监控的实现

    一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...

  7. 用FlexSlider制作支付宝2013版幻灯片演示插件

    flexslider制作支付宝2013版幻灯片精美特效,一款非常不错的jQuery特效源码可在下面地址或去源码搜藏网下载适用浏览器:IE8.360.FireFox.Chrome.Safari.Oper ...

  8. Android with Eclipse - Waiting for HOME ('android.process.acore') to be launched?

    mac机中使用命令行方式启动android sdk manager,有需要的朋友可以参考下. 相信使用mac机的用户做android开发都会有一个困惑,就是如何更新android sdk,或者说直接使 ...

  9. apache、mod_jk负载均衡与tomcat集群

    最近需要搭建apache和tomcat的集群,实现静态网站直接通过apache访问,动态网站转交给tomcat处理,实现负载均衡和tomcat集群配置. apache安装 wget http://ap ...

  10. springMVC+freemarker中Could not resolve view with name... 问题解决

    用到springMVC+freemarker,自己在做demo过程中报: 严重: Servlet.service() for servlet springmvc threw exception jav ...