Python可变参数详解:*args与**kwargs的使用指南

拾柒
拾柒
发布时间:2026-10-15 | 3人浏览过
原创

本文深入解析Python中*args和**kwargs的核心机制。通过具体代码示例,展示如何利用*args接收任意数量的位置参数(转为元组),以及利用**kwargs处理关键字参数(转为字典)。文章涵盖基础定义、代码实现、输出结果及命名规范,帮助开发者提升函数扩展性与代码复用能力。

1. 引言

本文将重点探讨Python语言中*args和**kwargs这两个特殊参数的具体用法,并结合实际代码示例进行详细说明。

为了更高效地掌握核心内容,我们直接进入主题。

2. 问题引入

在编写Python函数时,通常需要向函数传递数值,这些传入的数值即被称为函数参数。

让我们通过一个简单的加法运算案例来展开讨论:

def add(x,y):
    return x+y
print(add(2,3))

运行结果如下:

5

若需求升级,需要计算三个数字的和,只需调整函数以接收三个参数并返回总和即可,相关代码如下:

def add(x, y, z):
    return x+y+z

print(add(2, 3, 5))

运行结果如下:

10

倘若后续需要计算四个甚至五个数字的和,该如何处理?

当面对数量不确定的参数时,上述硬编码方式将导致问题。我们是否应不断修改函数以匹配确切参数数量?显然不必。实际上,这种场景正是*args和**kwargs发挥作用的典型场景。

3. Python中的*args

*args机制允许向Python函数传递可变数量的位置参数。在函数定义中,需在参数名前方添加星号*,以此标识该参数用于接收可变数量的值。

参考以下示例代码:

def add(*args):
    print(args, type(args))
add(2, 3)

执行输出如下:

(2, 3) <class 'tuple'>

由此可知,传入的参数在函数内部被封装为一个元组(tuple)。基于此特性,我们可以编写如下加法函数:

def add(*numbers):
    total = 0
    for num in numbers:
        total += num
    return total

调用方式如下:

print(add(2, 3))
print(add(2, 3, 5))
print(add(2, 3, 5, 7))
print(add(2, 3, 5, 7, 9))

执行输出如下:

5 10 17 26

需注意的是,上述示例中参数名并非必须为args,可替换为其他名称(如示例中的numbers)。但遵循惯例,通常使用*args作为参数名,以明确标识其接收可变数量参数的功能。

4. Python中的**kwargs

**kwargs是keyword arguments(关键字参数)的缩写。它允许向Python函数传递可变数量的关键字参数。在函数定义中,需在参数名前方添加双星号**,以标识此类参数。

参考以下示例代码:

def total_fruits(**kwargs):
    print(kwargs, type(kwargs))
total_fruits(banana=5, mango=7, apple=8)

执行输出如下:

{'banana': 5, 'mango': 7, 'apple': 8} <class 'dict'>

观察可知,在此场景下,参数以字典形式传递,并在函数内部构建为字典对象。基于此,我们可以实现total_fruits()函数以计算水果总数。

def total_fruits(**fruits):
    total = 0
    for amount in fruits.values():
        total += amount
    return total

调用方式如下:

print(total_fruits(banana=5, mango=7, apple=8))
print(total_fruits(banana=5, mango=7, apple=8, oranges=10))
print(total_fruits(banana=5, mango=7))

执行输出如下:

20 30 12

需注意的是,参数名并非必须为kwargs,可替换为其他名称(如示例中的**fruits)。但遵循惯例,通常使用**kwargs作为参数名,以明确标识其接收可变数量关键字参数的功能。

5. 总结

*args与**kwargs可组合使用,从而传入任意类型的参数。在参数数量或类型未知的情况下,这种机制极为高效,同时显著增强了函数的可扩展性。

关于Python中*args和**kwargs用法的详解至此结束。如需了解更多相关Python *args **kwargs内容,请查阅本站过往文章或继续浏览后续相关文章。感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表