Python参数传递机制:*args 和 **kwargs

Python参数传递机制:*args**kwargs

核心机制

  1. *args

    • 接收任意数量的位置参数(非关键字参数)
    • 在函数内部存储为元组
    • 典型场景:函数参数数量不确定时
  2. **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
典型用途 可变长度参数处理 动态配置/继承场景

高频应用场景

  1. 装饰器:包装函数时接收任意参数

    def logger(func):
        def wrapper(*args, **kwargs):
            print(f"执行函数: {func.__name__}")
            return func(*args, **kwargs)
        return wrapper
    
  2. 继承扩展:子类传递参数到父类

    class Child(Parent):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.extra = kwargs.get('extra')
    
  3. API封装:透传第三方库参数

    def call_api(url, *args, **kwargs):
        return requests.get(url, params=kwargs)
    

注意:函数定义中参数顺序必须为:(普通参数, *args, **kwargs)

posted @ 2025-08-29 11:15  清澈的澈  阅读(59)  评论(0)    收藏  举报