Python函数中不定长参数

本文详细介绍了Python函数中如何使用*args和**kwargs处理不定长参数,包括参数定义、使用示例、不同类型参数的组合以及常见应用场景。了解如何避免歧义并正确组织形参列表对于编写高效代码至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python函数中不定长参数

定义

在函数的形参列表中:

  • *args元组存储在函数调用时传入的所有额外的数值,元组名为args;
  • **kwargs字典存储在函数调用时传入的所有等式值,字典名为kwargs

之后就是在函数内调用这两个变量了,元组和字典的具体使用可以参看我的另一篇文章Python高级变量类型
举例:

def func(*args,**kwargs):   
    print("args元组为:",args)
    print("kwargs字典为:",kwargs)

func(1,2,3,4,5,name = '小明',age = 23)

运行结果:

注释: 这里的*args**kwargs不是必须为args和kwargs,也可以自己定义为*XX*XXX,但是通常情况下,Pycharm自动提示不香么?

实例

普通参数和不定长参数同时存在

举例1:

def func(a,b,*args,**kwargs):
    print('a的值为:',a)
    print('b的值为:',b)
    print("args元组为:",args)
    print("kwargs字典为:",kwargs)
    
func(1,2,3,4,5,name = '小明',age = 23)    # 一一对应,额外的给args和kwargs

运行结果:
在这里插入图片描述

  • 这里可以很明显的发现,形参列表和实参列表是一一对应的关系,将实参一个一个传入形参中,1赋值给a,2赋值给b,3,4,5没有变量可以赋值,则作为额外的数值存放在元组args,之后的name和age等式也是一样的道理

举例2:

def func(a,b,*args,c,**kwargs):   # 在args和kwargs加入另外一个形参
    print('a的值为:',a)
    print('b的值为:',b)
    print('c的值为:',c)
    print("args元组为:",args)
    print("kwargs字典为:",kwargs)

func(1,2,3,4,5,name = '小明',12,age = 23)

运行结果:
在这里插入图片描述

  • 知道上一个例子,这里报错就很容易理解,在arga右边有一个普通形参c,当实参传入额外数据的时候,传入3,4,5,12,到底是哪一个数值应该赋值给c呢,代码就会发生歧义,产生错误。
  • 总结: 形参列表中,在args或者wkargs的右边都是不能存在其他的普通参数的,这一点可以结合C++中,函数形参列表中含有默认形参值得右边不可存在普通参数的性质一起类别学习。

普通参数和不定长参数不同时存在

结合上一块例子可以知道,当普通参数和不定长参数不同时存在时,可以只存在args,也可只存在wkargs,当然两者也可都同时存在,且两者顺序不可颠倒。

举例1:

def func(*args,**kwargs):
    print("args元组为:",args)
    print("kwargs字典为:",kwargs)

func(1,2,3,4,5,name = '小明',age = 23)

运行结果:
在这里插入图片描述
举例2:

def func(*args):
    print("args元组为:",args)
    
func(1,2,3,4,5)

运行结果:
在这里插入图片描述

应用

计算不定长参数的和

def func(*args):
    print("args元组为:",args)
    s = 0
    for i in args:
        s += i
    print("和为:",s)

func(2,3,4,7,2,3)
func()

运行结果:
在这里插入图片描述

  • 这里最后输出的时空元组,别看错了,所以和也是0
  • 针对不定长参数函数的操作,牢记args是元组,kwargs是字典就可以了,具体两种Python高级变量类型的使用可以参看我的另一篇文章《Python高级变量类型》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philo`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值