如果想要一个函数能不固定接收任意多个参数,可以使用不定长参数。
python自定义函数中有两种不定长参数,第一种是*XXX,在传入额外的参数时可以不用指明参数名,直接传入参数值即可。第二种是**XXX,这种类型返回的是字典,传入时需要指定参数名。
加了一个星号 * 不定长参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。加了两个星号 ** 的参数会以字典的形式导入,存放已命名的变量参数。
例如
代码
#coding=utf-8
#第一个是元组形式,第二个是字典形式
def sun(*a, **b):
print(a)
print(b)
sun(1, 55258, x=25412, y=5123512)
不定长参数简单示例,第一个是普通参数,第二个是不定长参数,我们可依次打印输出,不定长参数为元组的形式,如b代表的是(55258,25412,5123512),而a作为普通参数,只能代表第一个1。
代码
#coding=utf-8
#不定长参数简单示例,第一个是普通参数,第二个是不定长参数
def sun(a, *b):
print(a)
print(b)
sun(1,55258,25412,5123512)
在a, *b, **c同时出现的时候,如下:
代码
#coding=utf-8
#使用不定长参数传固定值,注意,b、c可省略,a不可省略
def fuzhi(a, *b, **c):
print(a)
print(b)
print(c)
fuzhi(853521, 65134, 635263, 45563, 365, x=99, y=999)
运行结果
这个实例中,不定长参数b、c可省略,而普通参数a不可省略,假如我们省略a
代码
#coding=utf-8
#使用不定长参数传固定值,注意,b、c可省略,a不可省略
def fuzhi(a, *b, **c):
print(a)
print(b)
print(c)
fuzhi()
当我们用不定长参数来累加时:
代码
#coding=utf-8
#用不定长参数实行累加
print(1, 2, 3, 4, 5)
def sum(*nums):
"""
求多个数之和
:param list_one: 接收数字的不定长参数,会把参数组装成一个(tuple)元祖,赋值给不定长参数
:return: 返回所有数字之和
"""
result = 0
for num in nums:
if isinstance( num, (int,float)):
result = result + num
return result
sum()
print(sum(1, 2, 3))
当我们将普通参数写在不定长参数写在后面时
代码
#coding=utf-8
def JayChou(a, *b, c):
print(a)
print(b)
print(c)
JayChou(1, 555, 5768, 55451)
如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量
#coding=utf-8
#如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。
def void_tuple(a, *tuplela):
print(a)
for b in tuplela:
print(b)
return
print(1)
print(2, 3, 4, 5)