不定长参数

如果想要一个函数能不固定接收任意多个参数,可以使用不定长参数。

1.不定长参数两种基本形式:

python自定义函数中有两种不定长参数,第一种是*XXX,在传入额外的参数时可以不用指明参数名,直接传入参数值即可。第二种是**XXX,这种类型返回的是字典,传入时需要指定参数名。

加了一个星号 * 不定长参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。加了两个星号 ** 的参数会以字典的形式导入,存放已命名的变量参数。
例如
代码

#coding=utf-8

#第一个是元组形式,第二个是字典形式
def sun(*a, **b):
    print(a)
    print(b)

sun(1, 55258, x=25412, y=5123512)
(1,55258)
{'x':25412,'y':5123512}

2.实例

2.1实例一

不定长参数简单示例,第一个是普通参数,第二个是不定长参数,我们可依次打印输出,不定长参数为元组的形式,如b代表的是(55258,25412,5123512),而a作为普通参数,只能代表第一个1。

代码

#coding=utf-8

#不定长参数简单示例,第一个是普通参数,第二个是不定长参数
def sun(a, *b):
    print(a)
    print(b)

sun(1,55258,25412,5123512)

运行结果

 2.2实例二

在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()

运行结果

 则会出现以上报错情况

2.3实例三

当我们用不定长参数来累加时:

代码

#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))

运行结果

 2.4实例四

当我们将普通参数写在不定长参数写在后面时

代码

#coding=utf-8

def JayChou(a, *b, c):
    print(a)
    print(b)
    print(c)
JayChou(1, 555, 5768, 55451)

运行结果

会出现如下报错,因此,位置不能随意更改

 2.5实例五

如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量

#coding=utf-8

#如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。
def void_tuple(a, *tuplela):
    print(a)
    for b in tuplela:
        print(b)
    return

print(1)
print(2, 3, 4, 5)

运行结果

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐