** 是 打包/收集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元组展开合并