*args和**kwargs的实际应用解析

#「开学季干货」:聚焦知识梳理与经验分享#

在Python中,*args**kwargs是处理可变数量参数的两种机制,主要区别如下:

1. ‌参数类型与数据结构

  • *args‌:用于接收任意数量的‌位置参数‌(非关键字参数),这些参数会被打包成一个‌元组‌(tuple)传递给函数。
  • **‌kwargs:用于接收任意数量的**‌关键字参数‌(键值对参数),这些参数会被打包成一个‌字典**(dict)传递给函数。

2. ‌语法与使用场景

  • *args‌:
    • 语法:def func(*args),参数名前加单星号*
    • 典型场景:实现可变参数的函数(如求和、打印多个值)或包装函数中传递不定数量的位置参数。
  • **‌kwargs
    • 语法:def func(‌**kwargs),参数名前加双星号**‌
    • 典型场景:处理动态配置(如初始化对象属性)、传递可选的关键字参数。

3. ‌参数顺序规则

在函数定义中,*args必须位于普通参数之后,**kwargs必须位于所有参数(包括*args)之后。
例如:

def func(a, b, *args, **kwargs):
    pass

4. ‌参数解包功能

  • *args‌:可在函数调用时解包序列(如列表、元组)为单独的位置参数
args = (1, 2, 3)
func(*args)  # 等价于 func(1, 2, 3)
  • **‌kwargs:可在函数调用时解包字典为关键字参数
kwargs = {"x": 1, "y": 2}
func(**kwargs)  # 等价于 func(x=1, y=2)

5. ‌实际应用示例

  • *args示例‌:计算任意数量的数字之和。
def sum_all(*args):
    return sum(args)
print(sum_all(1, 2, 3))  # 输出 6

**‌kwargs示例:动态生成对象属性。​​​​​​

class Person:
    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)
p = Person(name="Alice", age=25)
print(p.name)  # 输出 "Alice"

总结

*args**kwargs的核心差异在于:

  • *args处理‌无名参数‌(元组),‌**kwargs处理**‌命名参数**(字典)。
  • 两者常结合使用以实现高度灵活的函数接口,如装饰器或继承中的参数传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值