重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
zip() 功能是从参数的多个迭代器中选取元素组合成一个新的迭代器。顾名思义,它就是一个将对象进行打包和解包的函数。
成都创新互联公司是专业的源城网站建设公司,源城接单;提供成都网站设计、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行源城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
它可以传入的参数包括;元组、列表、字典等迭代器
它返回一个zip对象,其内部元素为元组,一组一组的,可以转化为列表或元组,这里要强调一下,Python2和Python3中返回的zip对象有所不同。
Python3中zip()函数再不再返回list对象,但是可以通过list强行转换。(类似的函数变化还有dictionary关联的keys()、values()、items(),map(),filter())。
打包zip(iterables)
上面的代码使用的环境是Python3.6,其中list (z)操作就是强制转换。注意一个问题,a和b这两个列表是不同长短的,这时候zip函数就会匹配完最短的那个便结束。
当zip函数的参数只有一个时,它将从iterable中依次取一个元素,组成一个元组。
解包zip(*iterables)
解包,zip 相反,可理解为解压,返回多维矩阵形式,有几个组元素就返回几维的。
比如,下面我是用三个列表组合起来的迭代式,那么解压后就返回三维的矩阵
zip高级用法
讲完了基本的再来说一下该函数的高级用法。高级用法离不开一个词:Pythonic,就是将代码写的更优雅美观,看起来有逼格!
1. 列表推导
例如:
a = [1,2,3,4]
b = [5,6,7,8]
我们要同时遍历a、b,且要对它们进行操作,那就要放在同一个for循环内,zip函数正好合适
注意:如果是Python2环境中,要使用izip才能提高效率。
当然,如果你需要对下标进行操作,那么还需要加上enumerate函数
2. 使用zip创建键值对,zip方法返回的是一个元组,用它来创建键值对,简单明了。
序列解包是Python特有的语法,它将一个序列(或任何可迭代对象)解开,并将得到的值存储到一系列变量中。
一个有趣的例子是,利用序列解包实现交换两个或多个变量的值:
一个常见的应用场合:一个函数或方法返回一个元组(或序列多其他可迭代对象),这时可以直接使用一组变量承接返回值。例如把字典的 popitem 方法的返回值解包到key、value两个便里中:
需要格外注意的是:解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。
然而一个方法或函数返回序列时,其长度通常是不可预测的,又或许我们只关系其中的某些值,这时 可以使用通配符( )来接收多余的值。*
在Python中使用struct模块打包数据和在C/C++语言中定义一个结构体(也是把多个成员打包到一块)差不多。
只要客户端告诉了你打包的数据的格式(比如:数据包的总长度、数据包中各个数据域的长度及类型,以及端序——大端还是小端),然后定义一个等价的C语言结构体,并把接收到的数据放入一个这样的结构体变量(对象)中就完成了解包工作。然后,访问结构体中的特定成员,就是访问传送过来的特定数据了。
您说的装包是用元组,解包是用比如a, b, c = test_list (假设test_list为[1, 2, 3])