*在打包和解包中都可以使用,不是所谓的打包不加*,解包加*。
zip就是功能简单的打包函数,基本用法:ZIP
但zip会和*操作联合使用:从而实现了解包操作,但其实这里的解包本质上也是打包,原因如下:
在加入*号后zip函数会进行两步,1:*操作,2:zip操作
- *操作:
*可以放在函数的输入参数前,如myfunc(*args)形式,arg是个list,则此时*操作实现的功能是自动展开输入参数列表,如:args:List[arg1,arg2,arg3],经过“*”这个操作实际输入的myfunc的形式是myfunc(arg1,arg2,arg3)(当然前提函数参数列表这是这么定义的),这是一个很方便的小魔法操作。
2. zip操作
zip函数的输入参数数量不定,可以接受1~m个参数,当是一个时则返回本身,当是多个 时返回打包结果。
3. 二者联合-》zip(*)
不知道怎么解释,上例子吧。
打包操作:
zip(*[[1,2,3],[4,5,6]] )->zip([1,2,3], [4,5,6] )->[(1, 4), (2, 5), (3, 6)]
解包操作:
zip(*[(1, 4), (2, 5), (3, 6)] ) ->zip((1, 4), (2, 5), (3, 6))->[[1,2,3], [4,5,6]]
这下看懂了吧,*加压参数,zip打包,将输入的多个列表中同一位置的每个元素集成到一个元组中作为单个(single)打包结果(instance),返回一个instance列表。
如果没看懂,那我自己看好了。
参考:https://stackoverflow.com/questions/29139350/difference-between-ziplist-and-ziplist/29139418