苦练Python第14天:Python函数中的*args与**kwargs解析
原文链接:dev.to/therahul_gu…
作者:Rahul Gupta
译者:倔强青铜三
前言
大家好,我是倔强青铜三。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!
欢迎来到 100天Python挑战 的第14天!
今天,我们解锁 灵活参数 的魔法——*args
与 **kwargs
。它们让你的函数 想接多少参数就接多少,代码瞬间动态、可复用又强大。
今日速览
*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: 3Sum: 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: Aliceage: 30city: New York
🧪 3. 同时使用两者
可在同一函数内并用,顺序固定:*args
在前。
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
✅ 给 args
/kwargs
起更语义化的名字,如 *numbers
, **options
⚠️ 别让灵活变随意,显式参数仍优先🧠 今日复盘
*args
收集额外 位置参数**kwargs
收集额外 关键字参数两者可与常规参数混用,并支持解包实战:日志、灵活 API 等场景一次掌握最后感谢阅读!欢迎关注我,微信公众号:
倔强青铜三
。欢迎点赞
、收藏
、关注
,一键三连!!!