游乐游手机版
首页/AI教程/文章详情

苦练Python第14天:函数*args与**kwargs用法全面解析与实例教程

时间:2026-05-31 17:14
```html Python进阶第14天:深入解析函数中的*args与**kwargs灵活参数 欢迎来到100天Python学习挑战的第14天!今天我们将彻底解锁一个让Python函数极具灵活性的特性——*args 与 **kwargs。一旦掌握它们,你的函数就能像变形金刚一样,接收任意数量的参数,
```html

Python进阶第14天:深入解析函数中的*args与**kwargs灵活参数

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

欢迎来到100天Python学习挑战的第14天!今天我们将彻底解锁一个让Python函数极具灵活性的特性——*args**kwargs。一旦掌握它们,你的函数就能像变形金刚一样,接收任意数量的参数,代码瞬间变得动态、可复用且功能强大。许多Python新手初次见到这两个符号时多少会感到困惑,但实际上它们的逻辑非常直观易懂。

今日速览

  • *args**kwargs 的基本概念
  • 何时使用以及如何使用
  • 与常规参数混合使用的技巧
  • 实战示例与应用场景

1. 什么是 *args

*args 用于接收任意数量的位置参数,并自动将这些参数打包成一个元组(tuple)。让我们看一个简单的示例:

def add_numbers(*args):
    total = sum(args)
    print("Sum:", total)

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

输出结果:

Sum: 3
Sum: 60

你可以像遍历普通列表一样逐个访问这些打包后的参数:

def show_args(*args):
    for arg in args:
        print(arg)

2. 什么是 **kwargs

**kwargs 用于接收任意数量的关键字参数,并自动将这些参数打包成一个字典(dict)。参考下面的示例:

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

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

输出结果:

name: Alice
age: 30
city: New York

3. 同时使用两者

你可以在同一个函数中同时使用 *args**kwargs,但顺序是固定的:*args 必须放在前面,**kwargs 放在后面。

def demo_function(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

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

输出结果:

Positional arguments: (1, 2, 3)
Keyword arguments: {'name': 'Alice', 'job': 'Engineer'}

4. 默认参数 + 灵活参数

常规参数、*args**kwargs 可以混合定义,只需要把常规参数放在最前面:

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. 用 *** 解包传参

这个技巧在实际开发中非常实用:你可以将一个列表或字典用 *** 快速展开,作为参数传递给函数。

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)  # 列表解包为位置参数

实战:日志记录器

将学到的知识应用到一个真实的日志场景中:

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 来提升函数灵活性
  • ✅ 建议为 argskwargs 起更具语义化的名称,例如 *numbers**options,增强代码可读性
  • ⚠️ 灵活不等于随意——显式参数依然应优先使用,保持函数接口清晰易维护

今日复盘

  • *args 用于收集多余的位置参数,打包为元组
  • **kwargs 用于收集多余的关键字参数,打包为字典
  • 两者可与常规参数灵活混用,并支持解包传参
  • 实战场景:日志记录、灵活API接口等,一次掌握即可举一反三
```
来源:https://juejin.cn/post/7526031378464636963
上一篇OpenClaw 完全指南:从周末项目到GitHub最快20万Star AI Agent 下一篇深度搜索智能文献与网页检索分析工具
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
正确认识人工智能AI的核心意义与价值
AI教程 · 2026-05-31

正确认识人工智能AI的核心意义与价值

正确认识AI人工智能:理性看待其工具本质 最近,同事在群里转发了一张关于“人工智能Claude删库事故”的图片,这件事确实值得深思。看到的第一反应,解决问题的思路其实很清晰:无非是两手准备,一是建立事前的预防机制,二是完善事后的核查机制。你看,只要我们以严谨的态度去部署和运用人工智能,这类安全风险完

星图AI平台PETRV2-BEV模型新手训练完整教程
AI教程 · 2026-05-31

星图AI平台PETRV2-BEV模型新手训练完整教程

新手必看:在星图AI平台训练PETRV2-BEV模型的完整教程 在自动驾驶的感知世界里,BEV(鸟瞰图)技术正扮演着越来越关键的角色。它像一双“上帝之眼”,能将车辆周围多个摄像头捕捉的2D画面,无缝融合成一个统一的、俯视视角的3D空间。而在众多BEV方案中,PETRV2无疑是当前最受瞩目的选手之一。

AI股票分析师镜像部署与使用新手快速上手指南
AI教程 · 2026-05-31

AI股票分析师镜像部署与使用新手快速上手指南

快速上手指南:AI股票分析师镜像部署与使用,新手友好教程 想拥有一个随时待命的私人股票分析师吗?不必订阅昂贵的投研服务,也无需手动整理海量数据。今天介绍的这款AI股票分析师镜像,就能帮你实现这个想法。 它的核心,是将一个强大的语言模型与一套专为股票分析设计的“思维框架”打包在一起。你只需输入一个股票

AI进阶技巧解锁隐藏功能助你效率翻倍
AI教程 · 2026-05-31

AI进阶技巧解锁隐藏功能助你效率翻倍

掌握提示词进阶搭配、批量操作与自定义模板等核心技巧,能显著提升AI使用效率。通过优化指令结构、一键处理重复任务及设置个人偏好,AI输出将更精准高效,适配不同场景需求。批量操作前建议先测试样本,模板需定期更新,记忆功能应聚焦核心需求。

试用期工作总结怎么写?附范文与提示词
AI教程 · 2026-05-31

试用期工作总结怎么写?附范文与提示词

适合需求: 试用期工作总结范文与写作要点 引言 试用期转瞬即逝,在公司同事的热心帮带与领导的悉心指导下,我迅速融入了新环境,工作节奏也逐步理顺。这段时间不仅弥补了专业知识的短板,也进一步提升了实际业务能力。以下是对试用期工作的阶段梳理,也算是一次系统性的复盘。 工作内容 试用期内,我的核心工作主要围