苦练Python第14天:Python函数中的*args与**kwargs解析

苦练Python第14天:Python函数中的*args与**kwargs解析

原文链接:dev.to/therahul_gu...

作者:Rahul Gupta

译者:倔强青铜三

前言

大家好,我是倔强青铜三 。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

欢迎来到 100天Python挑战 的第14天!

今天,我们解锁 灵活参数 的魔法------*args 与 **kwargs。它们让你的函数 想接多少参数就接多少,代码瞬间动态、可复用又强大。


今日速览

  • *args 与 **kwargs 是什么
  • 何时使用、如何使用
  • 与常规参数混用技巧
  • 实战示例

🧠 1. 什么是 *args?

*args 接收任意数量的 位置参数 ,打包成 tuple。

python 复制代码
def add_numbers(*args):
    total = sum(args)
    print("Sum:", total)

add_numbers(1, 2)
add_numbers(10, 20, 30)

输出:

makefile 复制代码
Sum: 3
Sum: 60

像列表一样遍历:

python 复制代码
def show_args(*args):
    for arg in args:
        print(arg)

🧠 2. 什么是 **kwargs?

**kwargs 接收任意数量的 关键字参数 ,打包成 dict。

python 复制代码
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, city="New York")

输出:

vbnet 复制代码
name: Alice
age: 30
city: New York

🧪 3. 同时使用两者

可在同一函数内并用,顺序固定:*args 在前。

python 复制代码
def demo_function(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

demo_function(1, 2, 3, name="Alice", job="Engineer")

输出:

matlab 复制代码
Positional arguments: (1, 2, 3)
Keyword arguments: {'name': 'Alice', 'job': 'Engineer'}

✨ 4. 默认参数 + 灵活参数

混合常规参数、*args 与 **kwargs:

python 复制代码
def send_email(to, subject, *attachments, **headers):
    print("To:", to)
    print("Subject:", subject)
    print("Attachments:", attachments)
    print("Headers:", headers)

send_email(
    "user@example.com",
    "Meeting Notes",
    "file1.pdf", "file2.png",
    priority="high", read_receipt=True
)

🔄 5. 用 * 与 ** 解包传参

把列表或字典一次性展开:

python 复制代码
def greet(name, age):
    print(f"Hello {name}, you're {age} years old.")

info = {"name": "Bob", "age": 25}
greet(**info)  # 字典解包为关键字参数

nums = [5, 10]
def multiply(x, y):
    print(x * y)

multiply(*nums)  # 列表解包为位置参数

🎯 实战:日志记录器

python 复制代码
def log_event(event_type, *args, **kwargs):
    print(f"[{event_type.upper()}]")
    for arg in args:
        print(f"- Detail: {arg}")
    for key, val in kwargs.items():
        print(f"- {key}: {val}")

log_event(
    "error",
    "File not found", "User logged out",
    filename="report.pdf", user="admin"
)

🧼 最佳实践

  • ✅ 不确定位置参数数量 → *args
  • ✅ 想接收任意关键字 → **kwargs
  • ✅ 给 args/kwargs 起更语义化的名字,如 *numbers, **options
  • ⚠️ 别让灵活变随意,显式参数仍优先

🧠 今日复盘

  • *args 收集额外 位置参数
  • **kwargs 收集额外 关键字参数
  • 两者可与常规参数混用,并支持解包
  • 实战:日志、灵活 API 等场景一次掌握

最后感谢阅读!欢迎关注我,微信公众号 :倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

相关推荐
一 铭3 分钟前
WrenAI 详解:给 AI Agent 的开源 GenBI 引擎
人工智能·开源
say_fall5 分钟前
【AI大模型】MCP 模型上下文协议:客户端-服务器架构、JSON-RPC 消息与能力协商、工具发现与调用链路、与函数调用的分工
服务器·人工智能·架构
一条大祥脚15 分钟前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
早起CaiCai24 分钟前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法
周杰伦的稻香31 分钟前
AI 助手 2.0:多轮对话、卡片化与文章页感知
人工智能
Martina_03211 小时前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
10年前端老司机1 小时前
Milvus 8种检索能力实践
数据库·python·agent
狒狒AI1 小时前
手绘白板动画的生产线拆解:AI 出图、笔迹对齐、镜头渲染七道工序(附 21 个开源脚本)
人工智能·aigc
用户2763965765101 小时前
上手 GitHub 官方 Spec Kit:AI 编码别再裸奔,先写 spec 再出码,SDD规约开发
人工智能
Lucas_coding1 小时前
【Agent】Agent 知识地图:核心概念、工程方法与产品生态
人工智能