Python函数不定长参数详解:*args与**kwargs用法及注意事项
本文深入解析Python函数中不定长参数的两种形式:*args与**kwargs。详细阐述*args如何接收位置参数并存入元组,以及**kwargs如何接收关键字参数并存入字典。重点说明带星号形参的数量限制、位置灵活性,以及后续参数必须作为关键字参数传递的规则,附带代码示例与常见报错分析,帮助开发者掌握灵活传参技巧。
一、不定长位置参数
# 在定义函数参数时,可以在形参的前面加*,该形参将获取所有的位置实参
# 它会将所有的实参保存在一个元组中
def fn(*args):
print("args=", args)
print("args type:", type(args))
# 带*形参和其他参数配合使用
def fn1(a, b, *args):
print(a)
print(b)
print(args)
# 下面这两种写法可以,但是在传实参的时候要注意
def fn2(*args, a, b):
print(a)
print(b)
print(args)
def fn3(a, *args, b):
print(a)
print(args)
print(b)
if __name__ == "__main__":
# 接收所有的位置参数
fn(1, 2, 3, 4, 5)
fn1(11, 12, 13, 14)
# fn2(21, 22, 23, 24) #这么传会报错
fn2(21, 22, a=23, b=24)
# fn3(21, 22, 23, 24) #这么传会报错
fn3(21, 22, 23, b=24)
函数运行结果如下:

函数fn1的运行结果:

函数fn2的运行结果:

函数fn3的运行结果:

总结:
1. 定义形参时,带星号*的参数只能存在一个,若定义多个会引发报错,Python无法识别。
2. 带星号的形参可以与其他普通参数配合使用,例如与不带星号的参数共同定义。
3. 带星号的形参不一定非要放在参数列表的最后,它可以置于最前面或中间位置。但需特别注意:位于带星号参数之后的所有其他参数,在调用时必须以关键字参数的形式传递,否则将导致报错。
二、不定长关键字参数
# 带*的形参只能接收位置参数,关键字参数接收不能接收
# 如下会报错,fn传如下值是会报错的
def fn(*args):
print("args=", args)
print("args type:", type(args))
if __name__ == "__main__":
# 这样传会保存,args不能接收关键字参数
fn(1, 2, 3, 4, a=10)
运行代码如下:

# **形参能接收关键字参数
# 它将接收的所有关键字参数统一保存在一个字典中
def fn4(**kwargs):
print("kwargs = ", kwargs)
print(type(kwargs))
if __name__ == "__main__":
fn4(a=1, b=2, c=3)
运行结果:

总结:
1. 带双星号**的形参只能有一个,且必须放置在所有参数的最后位置。
2. 在生成的字典中,键(key)对应参数的名称,值(value)对应传入的参数值。
至此,关于Python函数中不定长参数的相关知识介绍完毕。如需了解更多Python不定长参数相关内容,建议搜索本站历史文章或继续阅读后续教程,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













