当前位置: 首页 > news >正文

Python中的魔法参数*args 和 **kwargs

在定义函数时,你可能无法提前确定用户会传入多少个参数。*args**kwargs 就是用来处理这种可变数量参数的工具:

  • *args:接收任意数量的位置参数(非键值对形式),并将它们打包成一个元组 (tuple)
  • **kwargs:接收任意数量的关键字参数(键值对形式),并将它们打包成一个字典 (dict)

注意:argskwargs 只是约定俗成的命名,你可以改成其他名字(比如 *params**kwargs_dict),但强烈建议遵守约定,让代码更易读。

一、*args 的用法

1. 基础示例

def sum_numbers(*args):"""计算任意数量数字的和"""total = 0# args 是一个元组,可以遍历for num in args:total += numreturn total# 调用方式1:传入多个位置参数
print(sum_numbers(1, 2, 3))  # 输出:6
# 调用方式2:解包列表/元组传入(加*)
nums = [4, 5, 6]
print(sum_numbers(*nums))    # 输出:15

2. 结合普通参数使用

*args 必须放在普通位置参数之后

def print_info(name, *args):print(f"姓名:{name}")print(f"其他信息:{args}")print_info("张三", 25, "北京", "程序员")
# 输出:
# 姓名:张三
# 其他信息:(25, '北京', '程序员')

二、**kwargs 的用法

1. 基础示例

def print_person(**kwargs):"""打印个人信息(键值对形式)"""for key, value in kwargs.items():print(f"{key}:{value}")# 调用方式1:传入多个关键字参数
print_person(name="李四", age=30, city="上海")
# 输出:
# name:李四
# age:30
# city:上海# 调用方式2:解包字典传入(加**)
person_info = {"name": "王五", "age": 28, "job": "设计师"}
print_person(**person_info)
# 输出:
# name:王五
# age:28
# job:设计师

2. 结合普通参数、*args 使用

参数顺序必须是: 普通参数 → *args → **kwargs:

def func(a, b, *args, **kwargs):print(f"普通参数a:{a}")print(f"普通参数b:{b}")print(f"args:{args}")print(f"kwargs:{kwargs}")func(1, 2, 3, 4, 5, x=10, y=20)
# 输出:
# 普通参数a:1
# 普通参数b:2
# args:(3, 4, 5)
# kwargs:{'x': 10, 'y': 20}

三、实际应用场景

  1. 封装通用函数

    :比如写一个日志函数,支持传入任意附加信息:

    def log(level, message, **kwargs):print(f"[{level}] {message}")if kwargs:print("附加信息:", kwargs)log("INFO", "用户登录成功", user_id=1001, ip="127.0.0.1")
    
  2. 函数装饰器

    :装饰器需要兼容被装饰函数的任意参数,必须用*args**kwargs

    def decorator(func):def wrapper(*args, **kwargs):print("函数执行前的操作")result = func(*args, **kwargs)  # 传递所有参数给原函数print("函数执行后的操作")return resultreturn wrapper@decorator
    def add(a, b):return a + bprint(add(3, 5))  # 输出:8(同时会打印前后操作)
    

总结

  1. *args 接收任意数量的位置参数,打包成元组;**kwargs 接收任意数量的关键字参数,打包成字典。
  2. 参数定义顺序必须是:普通参数 → *args**kwargs,调用时可通过 */** 解包列表 / 字典传入。
  3. 核心作用是让函数支持可变数量的参数,常用于通用函数、装饰器、类的继承等场景。
http://www.jsqmd.com/news/391011/

相关文章:

  • 第 2 章:全能开发环境与交叉编译工具链构建
  • 第 1 章:M33 领航——STM32MP257F-DK 硬件解密与启动逻辑重构
  • Linux Service 服务详解:分类、服务生命周期、运行级别、管理命令等
  • 再论自然数全加和 - 质数螺旋的图片和程序
  • 别再哭求数据恢复!Excel 删错 / 未保存 / 被覆盖,11 招自己就可以搞定深度解析:原理、实战与踩坑记录
  • 实时字幕翻译插件:零代码实现PotPlayer双语字幕无缝切换
  • NCM格式解密与转换完全指南:从原理到实践的音乐自由解决方案
  • 【例 1】二叉苹果树(信息学奥赛一本通- P1575)
  • 原神智能剧情辅助:BetterGenshinImpact的3大突破点与5个实用技巧
  • iOS微信红包自动抢工具:智能监测、自动响应与安全防护的全面解析
  • 如何高效升级DLSS版本?用DLSS Swapper提升游戏画质与帧数的完整方案
  • XUnity.AutoTranslator:Unity游戏多语言实时翻译解决方案
  • 电话号码智能定位:精准高效的地理位置查询解决方案
  • 2026年武汉汉正街中高端潮流女装优质供应链深度盘点 - 2026年企业推荐榜
  • 2026年MVR蒸汽压缩机批发厂家可靠度综合评估报告 - 2026年企业推荐榜
  • 2026湖南全屋定制装修如何避坑?权威评选标准与诚信品牌推荐 - 2026年企业推荐榜
  • 2026年办公室净水器供应厂家综合评测与选型指南 - 2026年企业推荐榜
  • 5个步骤掌握Switch控制器设备适配:开源解决方案从连接痛点到跨平台兼容的实践指南
  • 3大突破如何解决英雄联盟玩家的效率难题:LeagueAkari智能辅助工具深度解析
  • DLSS不生效?3步验证+5个隐藏技巧让画面性能双提升
  • 探索HsMod:从入门到精通的炉石传说增强插件全面解析
  • 3个破局方案:ncmdump让网易云音乐格式自由
  • 2026年国内韩语培训机构深度评测:6家顶尖机构综合解析 - 2026年企业推荐榜
  • Blender3mfFormat:突破3D打印工作流瓶颈的格式处理方案
  • 2026年初无局放试验变压器知名厂商综合评测与选购指南 - 2026年企业推荐榜
  • 2026开年决策:宜昌顶级旅游服务商全景评测与推荐 - 2026年企业推荐榜
  • 如何深度优化NVIDIA显卡性能:Profile Inspector进阶调校指南
  • 深圳净水解决方案优选:这三家企业口碑与技术俱佳 - 2026年企业推荐榜
  • 2026年优质猕猴桃采购指南:核心经销商解析与联系 - 2026年企业推荐榜
  • 2026湖南专业装修连锁品牌全景评估与战略选择指南 - 2026年企业推荐榜