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