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)
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页