当前位置: 首页 > 后端技术 > Python

pythonmap函数详解

时间:2023-03-26 13:17:00 Python

pythonmap函数详解一个参数是一个函数对象。map()函数格式:map(func,seq1[,seq2,...])map函数接收的第一个参数是一个函数对象,后面接收一个或多个序列;map函数将func应用于每个值的后续序列,并返回一个迭代器。例子:deffunc(a):returna**2>>>map(func,[1,2,3])#返回一个map对象,它是一个迭代器;>>>list(map(func1,[1,2,3]))[1,4,9]#将1,2,3作为参数一一传入func,分别得到1,4,9;finally将结果转为list可以传入多个序列,一个序列对应一个函数的一个参数;序列长度可以不一致,默认取相同长度的序列值;例如:deffunc(a,b):returna+b>>>b=list(map(func,[10,20,30],[1,3,10]))#的值将两个序列的对应位置分别作为a和b应用于func;>>>print(b)[11,23,40]#>>>list(map(func,[10,20,30,40],[1,3,10]))#长度不一致,和默认取相同长度的序列[11,23,40]>>>list(map(func,[1,2,3],[10,20,30,40],[1,3,10]))#sequence的个数必须和func的参数个数一致TypeError:func()takes2positionalargumentsbut3weregiven>>>b=list(map(func,[1,2,3]))TypeError:func()missing1requiredpositionalargument:'b'可以看出,map()函数实现的功能与for循环和列表推导非常相似,那么map、for循环各自的效率如何,和列表理解?例如:map方法实现importtimestart=time.time()deffunc(a,b):returna+bc=list(map(func,range(1000000),range(1000000)))end=time.time()>>>end-start0.16860485076904297for循环实现导入timestart=time.time()c=list()foriinrange(1000000):c.append(i+i)end=time.time()>>>end-start0.2443540096282959listcomprehensionimplementationimporttimea=list(range(1000000))b=list(range(1000000))start=time.time()c=[a[i]+b[i]foriinrange(1000000)]end=time.time()打印(end-start)0.2124321460723877从上面的对比可以看出,map的效率最高,for循环的效率最低;基于map的功能和效率,当项目开始涉及到更多的循环时,可以考虑是否使用map代替for循环,一方面代码更加简洁和pythonic,另一方面时间效率的代码会更高;