Python函数不定长参数详解:*args与**kwargs用法及注意事项

青禾
青禾
发布时间:2026-10-14| 2人浏览过
原创

本文深入解析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不定长参数相关内容,建议搜索本站历史文章或继续阅读后续教程,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。