**
是 打包/收集def foo(**kw): # 这里的 ** 把调用者传来的所有 key=value 收成一个 dict
print(type(kw), kw)
a=1, b=2
就得到 {'a':1, 'b':2}
**
才是 拆包/展开d = {'x': 10, 'y': 20} foo(**d) # 这里的 ** 把字典拆成 x=10, y=20 再送进去
拆完后效果等价于foo(x=10, y=20)
**kw
收集,实参 **dict
散发;方向不同,运算符一样而已。
场景 | *args | **kwargs |
---|---|---|
定义(形参) | 把多余位置实参打包成 tuple | 把多余关键字实参打包成 dict |
调用(实参) | 把可迭代对象拆成单个位置实参 | 把字典拆成单个关键字实参 |
调用时必须展开(解包),调用后必须合并(打包)----同时具有两个作用
*args ,**kwargs
*dic是对字典得keys展开合并 等价于 *dic.keys()
*dic.values()是对字典得所有values展开合并
*dic.items()是字典得key,value元组展开合并