这两天看Python Cookbook的第四章的时候,偶尔会有这两个内建函数蹦出来。于是本着深入了解就是一种学习的态度了解了一下。
首先,比较详细的介绍的话,直接在你自己的手里的交互式下用help(),这里就不多说了。
zip, zip(seq0,...):
对(多个)序列(list, tuple)进行“压包”操作,返回一个以元组为单元的list, 如 a = [1,2,3], b = ('a','b','c'), ret = zip(a,b), 则 ret = [(1,'a'), (2,'b'), (3, 'c')]。
允许多个序列作为参数, 当只输入一个序列时,如 a = [1,2,3], ret = zip(a), 则 ret = [(1,),(2,),(3,)]。
返回的list的长度将取决于输入的“短板”,即长度最短的那个序列。
map, map(func, seq0, ...):
对(多个)序列(list,tuple)“压包”,然后作为参数调用func,将返回结果打包为一个以元组为单元的list。
一个例子:
>>>flag = 0
>>>def func(*args):
... try:
... global flag
... flag += 1
... return args[0]+10, args[1].upper, flag
... except(TypeError):
... return args[0], args[1], flag
>>>lista = [1,2,3]
>>>listb = ['a','b','c','d']
>>>listc = [100,200,300]
>>>ret = map(func, lista, listb, listc)
>>>ret
[(11,'A',1), (12,'B',2), (13,'C',3), (None,'d',4)]
从这个例子可以看出一下几点:
0,map返回的结果(list)主要以func的行为为依据。 func里没有对args[2]进行返回,所以ret里没有listc的内容。
1,返回的list的长度以输入的最长的序列为标准进行补齐。 lista在ret[3]上被“补充”了一个None。
2,先补齐,再传参,最后输出。 如果没有try--except的话,本例会报错TypeError。似乎可以说明先进行了补齐,然后再传参。
3,将欲打包的结果,逐个传参调用func。 全局变量flag在func每运行一次的时候,都发生了变化。
另外,当func为None,并且输入的序列数至少为2时,map“退化”为zip; fun为None,只属于一个序列时,如 ret = map(None, alist), 则 ret == alist 为True, ret is alist 为False。
首先,比较详细的介绍的话,直接在你自己的手里的交互式下用help(),这里就不多说了。
zip, zip(seq0,...):
对(多个)序列(list, tuple)进行“压包”操作,返回一个以元组为单元的list, 如 a = [1,2,3], b = ('a','b','c'), ret = zip(a,b), 则 ret = [(1,'a'), (2,'b'), (3, 'c')]。
允许多个序列作为参数, 当只输入一个序列时,如 a = [1,2,3], ret = zip(a), 则 ret = [(1,),(2,),(3,)]。
返回的list的长度将取决于输入的“短板”,即长度最短的那个序列。
map, map(func, seq0, ...):
对(多个)序列(list,tuple)“压包”,然后作为参数调用func,将返回结果打包为一个以元组为单元的list。
一个例子:
>>>flag = 0
>>>def func(*args):
... try:
... global flag
... flag += 1
... return args[0]+10, args[1].upper, flag
... except(TypeError):
... return args[0], args[1], flag
>>>lista = [1,2,3]
>>>listb = ['a','b','c','d']
>>>listc = [100,200,300]
>>>ret = map(func, lista, listb, listc)
>>>ret
[(11,'A',1), (12,'B',2), (13,'C',3), (None,'d',4)]
从这个例子可以看出一下几点:
0,map返回的结果(list)主要以func的行为为依据。 func里没有对args[2]进行返回,所以ret里没有listc的内容。
1,返回的list的长度以输入的最长的序列为标准进行补齐。 lista在ret[3]上被“补充”了一个None。
2,先补齐,再传参,最后输出。 如果没有try--except的话,本例会报错TypeError。似乎可以说明先进行了补齐,然后再传参。
3,将欲打包的结果,逐个传参调用func。 全局变量flag在func每运行一次的时候,都发生了变化。
另外,当func为None,并且输入的序列数至少为2时,map“退化”为zip; fun为None,只属于一个序列时,如 ret = map(None, alist), 则 ret == alist 为True, ret is alist 为False。