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. jQuery之动画效果show()......animate()

    jQuery之动画效果 1.show()显示效果 语法:show(speed,callback) Number/String,Function speend为动画执行时间,单位为毫秒.也可以为slow ...

  2. Find发帖水王哥

    Find发帖水王 传说贴吧有一大“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子总数的一半.如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的 ...

  3. careercup-数组和字符串1.4

    1.4 编写一个方法,将字符串中的空格全部替换为“%20“.假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的”真实“长度. C++实现代码: #include<iostream> ...

  4. 高效 jquery 的奥秘

    当你准备使用 jQuery,我强烈建议你遵循下面这些指南: 1. 缓存变量 DOM 遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $( ...

  5. php yield

    php中关于 yield 关键字的介绍[点击查看] <?php function gen_one_to_three() { for ($i = 1; $i <= 3; $i++) { // ...

  6. WGS84经纬度坐标与web墨卡托之间的转换【转】

    第一种方法: //经纬度转Web墨卡托 dvec3 CMathEngine::lonLat2WebMercator(dvec3 lonLat) { dvec3 mercator; ; ); ; mer ...

  7. Bootstrap学习——起步

    一,前言 个人不是专业从事前端开发,但在一个小公司里工作,作为有过这样经历的程序员都知道,开发一个网站或者是一个管理系统,程序员基本所有的事都包了,真是什么都要懂一点啊.而我个人也不怎么喜欢写CSS和 ...

  8. (转)php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法

    php 获取今日.昨日.上周.本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime. 下面首先还是直奔主题以示例说明如何使用 mktime 获取今日.昨日.上周.本月的起 ...

  9. Servie学习总结

    一.什么是Service Service是一个应用程序组件,它是安卓实现程序后台运行的一个解决方案. 二.分类 服务有两种类别started.bound.但是一个服务类所要继承的类是一样的,都是Ser ...

  10. Tomcat - java.lang.UnsupportedClassVersionError:Unsupported major.minor version 51.0 (unable to load class com.microsoft.sqlserver.jdbc.SQLS

    今天使用Tomcat连接sql Server 2008 enterprise的时候,报错: HTTP Status 500 - Servlet execution threw an exception ...