打开《Python入门与实战》_一步步学会Python_8.4.2 案例解析
147
2023-10-19
【摘要】 本书摘自《Python3快速入门与实战》一书中第4章,第2节,由肖冠宇、杨捷等编著。
4.2.4 不定长参数
有时需要一个函数能处理不定个数、不定类型的参数,这些参数叫作不定长参数,不定 长参数在声明时不会设置所有的参数名称,也不会设置参数的个数。
不定长参数有两种定义方式: 一种是不定长参数名称前有一个*表示把接收到的参数值 封装到一个元组中;另一种是不定长参数名称前有两个*表示接收键值对参数值,并将接收 到的键值对添加到一个字典中。
1. 带有一个*的不定长参数
例4- 5 计算任意多个数字的和(源代码位置: chapter04/4.2 函数参数.py)。
案例代码如下:
#计算任意多个数字的和
def any num sum(*args)
print("args 参数值:",args)
print("args参数类型:",type(args))
rs=0
#判断元组是否不为空
if len(args)>0:
#循环遍历元组,累加所有元素的值
for arg in args:
rs+= arg
print("总和:{}".format(rs))
#函数调用
any num sum(20,30)
any num sum(20,30,40,50)
any num sum(20,30,40,50,60,70)
运行结果如下:
args 参数值: (20,30)
args 参数类型: class 'tuple>
总和:50
args 参数值:(20,30,40,50)
args 参数类型:总和:140
args 参数值:(20,30,40,50,60,70)
args 参数类型:总和:270
解析:不定长参数*args 接收任意个数的数字,并将函数调用传入的数字封装到元组 中。通过循环遍历元组,获取每个参数值,然后累加求和。不定长参数不仅可以接收数字类 型的参数值,还可以接收其他不同数据类型的参数值。在定义函数时,在不定长参数之前还 可以设置其他的参数。
2. 带有两个*的不定长参数
例4 - 6 每月在发工资之前,公司的财务要计算每个人的实发工资,这里我们使用一种 比较简单的工资计算方法:实发工资=基本工资-个人所得税一个人应缴社保费用,下面按照 这个工资计算方法编写一个工资计算器函数(源代码位置: chapter04/4.2 函数参数.py)。 ( 源 代码位置: chapter04/4.2 函数参数.py)。
案例代码如下:
def pay(basic,**kvargs):
print("kvargs参数值:",kvargs)
print("kvargs 参数类型:",type(kvargs))
#扣除个税金额
tax =kvargs.get("tax")
#扣除社保费用
social =kvargs.get("social")
#实发工资=基本工资-缴纳个税金额-缴纳社保费用
pay =basic-tax-social
print("实发工资:{}".format(pay))
#函数调用
pay(8000,tax=500,social=1500)
运行结果如下:
kvargs参数值: {tax:500,'social:1500}
kvargs参数类型:实发工资:6000
解析:不定长参数**kvargs 接收了函数调用时传入的键值对形式的实参,通过运行结果 打印出的 kvargs 参数值和参数类型“dict”, 可以知道 kvargs 参数将接收到的参数值封装到 了字典中。
3. 拆包
当一个函数中设置了不定长参数,如果想把已存在的元组、列表、字典传入到函数 中,并且能够被不定长参数识别,需要使用拆包方法。下面通过示例详细介绍拆包的具体 使用方法。
例4-7 使用例4-5中定义的求任意多个数字和的函数 any num sum, 计算一个列表中 多个数字的和;使用例4-6 中定义的工资计算器,计算某个人的实发工资(源代码位置: chapter04/4.2函数参数.py)。
案例代码如下:
#求数字列表中所有元素的累加和
#数字列表
num list =[10,20,30,40]
#由于any num sum 函数设置了不定长参数*args,所以在传入列表时需要使用拆包方法"*列表" any num sum(*num list)
#打印一行分割线
print("---------------------")
#个人工资计算器
#发工资之前需要扣除的费用
fee dict ={"tax":500,"social":1500}
#由于pay 函数设置了不定长参数**kvargs,所以在传入字典时需要使用拆包方法"**字典" pay(8000,**fee dict)
运行结果如下:
args 参数值:(10,20,30,40)
args参数类型:总和:100
kvargs参数值:{tax':500,'social':1500}
kvargs参数类型:实发工资:6000
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~