Python参数传递机制:*args 和 **kwargs
Python参数传递机制:*args 和 **kwargs
核心机制:
-
*args- 接收任意数量的位置参数(非关键字参数)
- 在函数内部存储为元组
- 典型场景:函数参数数量不确定时
-
**kwargs- 接收任意数量的关键字参数(key=value形式)
- 在函数内部存储为字典
- 典型场景:需要处理具名参数或扩展配置时
示例代码
def demo_func(a, b, *args, **kwargs):
print(f"固定参数: a={a}, b={b}")
print(f"*args 内容: {args} (类型: {type(args)})")
print(f"**kwargs 内容: {kwargs} (类型: {type(kwargs)})")
# 调用示例
demo_func(1, 2, 3, 4, 5, name="Alice", age=25, city="Beijing")
输出结果:
固定参数: a=1, b=2
*args 内容: (3, 4, 5) (类型: <class 'tuple'>)
**kwargs 内容: {'name': 'Alice', 'age': 25, 'city': 'Beijing'} (类型: <class 'dict'>)
关键规则
| 特性 | *args |
**kwargs |
|---|---|---|
| 参数类型 | 位置参数 | 关键字参数 |
| 内部结构 | 元组 (tuple) |
字典 (dict) |
| 顺序要求 | 必须出现在普通参数后 | 必须出现在*args后 |
| 典型用途 | 可变长度参数处理 | 动态配置/继承场景 |
高频应用场景
-
装饰器:包装函数时接收任意参数
def logger(func): def wrapper(*args, **kwargs): print(f"执行函数: {func.__name__}") return func(*args, **kwargs) return wrapper -
继承扩展:子类传递参数到父类
class Child(Parent): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.extra = kwargs.get('extra') -
API封装:透传第三方库参数
def call_api(url, *args, **kwargs): return requests.get(url, params=kwargs)
注意:函数定义中参数顺序必须为:
(普通参数, *args, **kwargs)

浙公网安备 33010602011771号