Args & kwargs 函数可变长参数对比
在Python中,*args和**kwargs是用于处理函数可变长参数的两种机制,用来允许函数接受可变数量的参数。
1. *args¶
• 作用:
-
收集 位置参数(Positional Arg ument s),将多余的位置参数打包成**元组**。
-
接受列表、元组解包的结果(
*ls),自动作为*位置参数*。
• 语法:在参数名前加一个星号 *(如 *args,但名称可以自定义)。
• 使用场景:当函数需要接受不确定数量的*位置参数*时。
• 示例:
2. **kwargs¶
• 作用:
-
收集**关键字参数**(K ey w ord Arg ument s),将多余的关键字参数转成键值对打包成 字典(键为参数名,值为参数值)。
-
接受字典解包的结果(
**dict),自动作为 关键字参数 。注意:字典中参数的关键字要用 字符串 存储!
• 语法:在参数名前加两个星号 **(如 **info,名称可自定义)。
• 使用场景:当函数需要接受不确定数量的 关键字参数 时。
• 示例:
输出:
3. 组合使用¶
在函数定义中,它们可以同时存在,但必须遵循顺序:普通参数 → *args → **kwargs。
4. 解包参数(反向操作)¶
* 和 ** 也可用于调用函数时解包序列或字典:
• * 解包序列为位置参数:
• ** 解包字典为关键字参数:
5. 对比 *args 和 **kwargs¶
| 特性 | *args | **kwargs |
|---|---|---|
| 参数类型 | 位置参数 | 关键字参数 |
| 数据结构 | 元组(Tuple) | 字典(Dictionary) |
| 参数顺序 | 必须在普通位置参数之后、**kwargs前 |
必须在所有参数之后 |
| 解包与打包 | 函数调用时用*解包列表/元组 |
函数调用时用**解包字典 |
| 典型用途 | 接受可变数量的位置参数 | 接受可变数量的关键字参数 |
6. 其他关键点¶
-
命名约定:名称不一定是
args或kwargs,但这是约定俗成的命名方式。 -
函数调用时的解包:注意!对于
*args形参,即使只传一个实参也会打包成 元组;**kwargs同理。
*args 后的参数必须通过关键字传递(Python 3特性):
总结¶
• *args:处理不确定数量的位置参数,灵活扩展函数。
• **kwargs:处理不确定数量的关键字参数,适合配置项或可选参数。
• 两者结合使用能极大提升函数的通用性,常见于装饰器、继承等方法中。