1. zip()
之前练习的时候写过这样的代码:
1 | items = ["bananas", "mattress", "dog kennels", "machine", "cheeses"] |
zip是从每个参数列表中去一个元素,然后打包成新的元组,另外zip在python3中也是一种新的数据结构。

- zip()拆分元组
既然有打包,就一定有解包,就像文件的压缩与解压缩一样,那么python里面的解压用的是*表达式。
1 | ma = [('bananas', 15), ('mattress', 34), ('dog kennels', 42), ('machine', 120), ('cheeses', 5)] |
我们再来看下这个例子的结果,同样使用的是py3:

*表达式
*表达式提供了放方便的方法,可以理解为shell里面的通配符(**),用来匹配多个参数或者对象(这里的对象不一定指面向对象里的对象,我本意是指所有文件名),在shell里面,我们想要同时对多个文件进行操作,这时候通配符就有很大的作用了。比如同时编译多个文件,我们可以
1 | gcc *.c 或者 java *.java |
那么在python中的*表达式也是相近的用法,举个例子:
“`
def drop_first_last(a):
first, *middle, last = a
return middle
print(drop_first_last([1, 3, 4, 5, 5, 5 , 5]))
print(drop_first_last([1,2]))
“`
如果不用*表达式的话,默认形参数是3个,那么试着传入多个参数就会出错,*middle 相对于middle的好处就是可以用来接受多个参数,在print(drop_first_last([1, 3, 4, 5, 5, 5 , 5]))就是[3, 4, 5, 5, 5],当然传进去两个参数也可以的,不过这时候*middle就是空的了。但是,只是传入一个参数的话,python解释器会报一个’function’ object is not subscriptable的错误。

- zip()在python不同版本的区别
python2
1 | #python2 |

python3
1 |
|

由此可见,python2在zip的过程中自动把zip(a, b)转化成了list,python则需要显示转化。
本博客所有文章除特别声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 镜湖!
评论

