Python/Python 的 uppack(解包参数)
基本在 Python 中,我们经常会看到 * 和 **。这两个符号,一般在函数传参时使用。
函数的可变参数
* 和 ** 的第一个作用就是定义函数的可变参数,其中 * 表示的参数类似于一个 list, ** 表示的参数类似于一个 dict。
首先定义函数
1 | def test(*args, **kwarg): |
然后调用:
1 | test(1, 2, 3, a=4, b=5) |
输出如下:
1 | print args |
可以看到前面的args对应的参数是 1, 2, 3,而 kwarg``a=4, b=5 对应的参数是 a=4, b=5。
修改参数,再次运行:
1 | test(1, 2, a=3, b=4, c=5) |
输出如下:
1 | print args |
这次,args对应的参数是 1, 2,而 kwarg对应的参数是 a=3, b=4, c=5。
unpack 参数
在传参时,也可以使用 * 和 **,作用是 unpack (解包)参数。
还是以上面定义的函数为例。
调用如下:
1 | x = [1, 2, 3] |
输出如下:
1 | print args |
可以看到,这时 args对应的参数是两个元素 x, y,不能遍历 x 或者 y 内部。而 kwarg 没有对应的参数。
首先使用*解包参数到 args 中。
1 | test(*x, *y) |
输出如下:
1 | print args |
可以看到,这时 args对应的参数是 x, y解包后的数据;但是 y 本来应该是一个 dict,使用一个*解包 y ,只保留了 key,丢失了 value。而 kwarg 没有对应的参数。
下面使用**把 y 解包到 kwarg 中。
1 | test(*x, **y) |
输出如下:
1 | print args |





