掘金 人工智能 07月13日 11:56
苦练Python第14天:Python函数中的*args与**kwargs解析
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了Python函数中*args和**kwargs的用法,它们分别用于接收任意数量的位置参数和关键字参数,使函数更具灵活性和可复用性。文章通过示例展示了*args和**kwargs的定义、使用方法,以及如何与常规参数混合使用。此外,还探讨了通过*和**进行参数解包的技巧,并给出了实战示例——日志记录器。最后,文章强调了在使用灵活参数时应注意的最佳实践,以及如何根据不同情况选择合适的参数类型。

🧠 **args的作用与用法**: *args允许函数接收任意数量的位置参数,这些参数会被打包成一个元组(tuple)。例如,`add_numbers(*args)`函数可以接受多个数值参数,并计算它们的总和。

🧠 **kwargs的功能与应用**: **kwargs用于接收任意数量的关键字参数,这些参数会被打包成一个字典(dict)。例如,`print_info(**kwargs)`函数可以接受多个键值对参数,并打印它们的键和值。

✨ **灵活参数的组合与解包**: *args和**kwargs可以在同一个函数中一起使用,但顺序固定,*args必须在**kwargs之前。此外,可以使用*和**对列表和字典进行解包,将它们作为参数传递给函数。

🎯 **实战应用:日志记录器**: 文章通过一个日志记录器的例子,展示了如何使用*args和**kwargs来处理不同类型的日志事件,包括错误、警告等,并灵活地记录详细信息和附加信息。

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

原文链接:dev.to/therahul_gu…
作者:Rahul Gupta
译者:倔强青铜三

前言

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

欢迎来到 100天Python挑战 的第14天!
今天,我们解锁 灵活参数 的魔法——*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")

🧼 最佳实践


🧠 今日复盘

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Python *args **kwargs 函数 参数
相关文章