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 |