You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数定义中args与kwargs的区别、适用场景及示例解析

Python中*args与**kwargs的区别及适用场景

核心区别

  • *args:用于接收任意数量的位置参数,这些参数会被打包成一个**元组(tuple)**传入函数内部。
  • **kwargs:用于接收任意数量的关键字参数(键值对形式),这些参数会被打包成一个**字典(dict)**传入函数内部。

注:args和kwargs只是行业约定的命名,你可以替换成其他名称(比如*params、**options),但遵循惯例能让代码更具可读性。

适用场景概述

  • *args:当你不确定函数需要接收多少个无命名的位置参数时使用,比如处理批量的数值、字符串等输入。
  • **kwargs:当你需要让函数支持任意数量的可选配置参数(键值对形式),或者需要接收不确定的关键字参数时使用。

重要使用场景及示例

1. 扩展现有函数的参数范围

当你不想修改原有函数的定义,但需要让它支持更多参数时,可以用*args包装额外的输入。

def add_two(a, b):
    return a + b

def add_multiple(*args):
    if len(args) < 2:
        raise ValueError("至少需要传入两个参数")
    total = add_two(args[0], args[1])
    for num in args[2:]:
        total += num
    return total

print(add_multiple(1, 2, 3, 4))  # 输出: 10

2. 参数转发(传递参数给其他函数)

在包装函数中,可以用*args和**kwargs把接收到的所有参数原封不动地转发给另一个函数,避免逐一列举参数。

def log_message(*args, **kwargs):
    print("[DEBUG]", end=" ")
    # 把参数转发给内置print函数
    print(*args, **kwargs)

log_message("User login successful", username="alice", sep=" | ")
# 输出: [DEBUG] User login successful | username=alice

3. 创建支持可选配置的函数

当函数需要基础必填参数,同时允许用户传入任意数量的可选配置时,**kwargs是最佳选择。

def create_blog_post(title, content, **kwargs):
    post = {
        "title": title,
        "content": content,
        "published": True,  # 默认值
        "views": 0
    }
    # 用用户传入的配置覆盖默认值
    post.update(kwargs)
    return post

# 传入可选参数修改默认配置
print(create_blog_post("Python Tips", "*args vs **kwargs", published=False, category="Programming"))
# 输出: {'title': 'Python Tips', 'content': '*args vs **kwargs', 'published': False, 'views': 0, 'category': 'Programming'}

4. 批量处理可变数量的输入

针对需要处理多个同类输入的场景,*args可以简化参数接收逻辑。

def calculate_sum(*args):
    return sum(args)

print(calculate_sum(5, 10, 15, 20))  # 输出: 50
print(calculate_sum(1, 2))  # 输出: 3

内容的提问来源于stack exchange,提问作者Aman Chopra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:27:33