python中有些内置的高阶函数,如map(),filter(),reduce();之因此称其为高阶函数,由于这类函数接受的参数中有一个参数为函数对象。python
map()函数格式:map(func,seq1[,seq2,……])app
map函数接收的第一个参数为一个函数对象,后面接收1个或多个序列;map函数会将func做用在后面序列中的各个值上,并返回一个迭代器。函数
举例:ui
def func(a): return a**2 >>>map(func,[1,2,3]) <map object at 0x000002B127AEA700>#返回一个map对象,为一个迭代器; >>>list(map(func1,[1,2,3])) [1, 4, 9]#将1,2,3做为参数逐个传入func中,分别获得1,4,9;最后将结果转换为list
也能够传入多个序列,一个序列对应一个函数的参数;序列长度能够不一致,默认取到共同长度的序列值为止;code
举例:对象
def func(a,b): return a+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]))#序列数量必须和func的参数数量一致 TypeError: func() takes 2 positional arguments but 3 were given >>>b=list(map(func,[1,2,3])) TypeError: func() missing 1 required positional argument: 'b'
能够看到,map()函数实现的功能和for循环以及列表推导式很是相似,那么map和for循环以及列表推导式的各自效率如何?it
举例说明:io
import time start=time.time() def func(a,b): return a+b c=list(map(func,range(1000000),range(1000000))) end=time.time() >>>end-start 0.16860485076904297
import time start=time.time() c=list() for i in range(1000000): c.append(i+i) end=time.time() >>>end-start 0.2443540096282959
import time a=list(range(1000000)) b=list(range(1000000)) start=time.time() c=[a[i]+b[i] for i in range(1000000)] end=time.time() print(end-start) 0.2124321460723877
从上面对比能够看到,map的效率最高,for循环的效率最低;for循环
基于map的这类功能和效率,在项目开始涉及到较多循环时,都可多考虑可否用Map替代for循环,一方面代码更为简介和pythonic,另外一方面代码的时间效率会更高;class