Python中的*args和**kwargs解析

*args和**kwargs常用来函数的参数传递上:

def f(x, *args, **kwargs):
    print(type(x), x)
    print(type(args), args)
    print(type(kwargs), kwargs)

f(1,2,3, a=1, b=2)

输出:

<class 'int'> 1
<class 'tuple'> (2, 3)
<class 'dict'> {'a': 1, 'b': 2}

x为自定义的变量值,接收第一个值,args接收剩余的值并通过*汇聚成一个tuple;kwargs接收剩余的键值对并通过 ** 汇聚成一个字典。上述的3部分顺序是不能颠倒的,前两部分称为位置参数,最后一部分属于关键字参数。
在函数定义时,*和**的作用是汇聚参数为tuple和dict,但是在参数传递的时候相当于分解参数。
*list,tuple:可以将列表,元组拆分为多个元素
**dict:可以将字典分解为独立的元素。此时键值为变量名,对应的值就是变量的值。

def add(a, b):
    return a - b

data = [4, 3]
print(add(*data)) # 1, 等价于add(4,3)
print(*data)  # 4 3

data = {'a': 4, 'b': 3}
print(add(**data))  # 1,等价于add(a=4, b=3)
data = {'a': 3, 'b': 4}
print(add(**data))  # -1,等价于add(a=3,b=4)
print(**data)  # 无法直接输出

可以通过使用**灵活地汇聚参数和分解参数:

def add(a, b):
    return a+b


def f(x, **kwargs):
    print(x)
    print(kwargs)  # {'a': 1, 'b': 2}
    print(add(**kwargs))  # add(a=1, b=2)


f(1, a=1, b=2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值