一、概述
map操作是函式式程式設計中的重要技術之一,其作用就是對乙個集合中的每個元素做處理,生成乙個新的元素,由這些新的元素組成乙個新的集合的返回。
所以map操作後,產生的新集合的元素個數和原集合的元素個數相同,但裡面的元素值不一樣,元素值對應的型別也可以和原來的不一樣。
python通過內建的map函式也很好的支援了map操作。
map函式的語法格式為:map(function, iterable, ...
)二、案例
1、對集合iterable中的每乙個元素應用『function』方法,返回乙個新的元素,如:
>>> defdouble(a):
...
return a*2...
>>> map(double,range(5))
[0, 2, 4, 6, 8]
上面**先定義了乙個double函式,傳遞給map,range(5)返回乙個列表[0,1,2,3,4],經map處理後,返回乙個新的列表。
>>> arr = ['mary
', '
had', '
a', '
little
', '
lamb']
>>> def
strlen(a):
...
return
len(a)
...>>>map(strlen,arr)
[5, 3, 1, 7, 4]
上面**定義了乙個strlen方法,用於計算字串的長度。傳給map後,返回乙個列表,可以看出列表中的元素型別和原列表不一樣。但兩個列表的長度是一樣的。
2、如果給出了多個集合引數,則要求function也必須帶多個引數,如:
>>> deffun(a,b):
...
return a*100+b
...>>> map(fun,[1,2],[3,4])
[103, 204]
可以看出,是會平行的取每個集合中的元素來處理。
注意,如果某個集合的元素個數少於其它的集合的元素個數,則不足的會被擴充為none,但是否會出問題取決於fun中的運算方式。
3、如果function為none,對於單個集合返回乙個同樣的,但對於多個集合,返回乙個集合(集合中每個元素為元組)。如:
>>> arr = [1,2,3]>>> newarr =map(none,arr)
arr[1, 2, 3]
newarr
[1, 2, 3]
>>> del
newarr[:]
newarr
arr[1, 2, 3]
從上面**可以看出,即使是返回同樣的集合,map操作返回的是乙個新的集合。
>>> map(none,[1,2,3],['a','b'
])[(1, '
a'), (2, '
b'), (3, none)]
從上面**可以看出,返回的集合中元素是元組,長度不足的集合的元素以none替代。
三、lambda 表示式在map函式中的使用
的場合下使用,也就是指匿名函式。如:
>>> map(lambda x:pow(x,2),[1,2,3])[1, 4, 9]
上面的lambda x : pow(x,2) 定義了乙個函式,相當於
deffun(x):
return pow(x,2)
上面的map操作就等同 map(fun,[1,2,3] )
但使用lambda的好處是,省去了函式定義,這個場景還是很常見的,有很多時候,只需要能完成某個處理的函式,但具體名字無所謂,這時lambda就有用場了。這還避免了命名空間的汙染,因為多個名字,就多了一分衝突的的可能。
再看乙個有多個集合引數的例子
>>> map(lambda x,y:x+y,[1,2,3],[4,5,6])[5, 7, 9]
四、總結
使用map函式,可以讓我們編寫**時把精力集中中如何轉換元素上,不用關心集合的邊界,不用關心新集合的建立等。這正是函式式程式設計的優勢和典型特點所在。
下面通過例子來說明
Python 函式式程式設計 高階函式及內建函式
1 函式名可以當做引數傳遞 2 返回值可以是函式名 尾呼叫由於是函式的最後一步操作,不需要保留外層函式的呼叫記錄,因為呼叫位置 內部變數等資訊不會再用到了,只需要直接用內層函式的呼叫記錄,取代外層函式的呼叫記錄就可以了。滿足以下兩個特性的任意乙個即為高階函式 1 函式的傳入引數是乙個函式名 2 函式...
python內建函式 程式設計)
10.輸入10個數,將列表中元素逆置後輸出 l 1,2,3,4,5,6,7,8,9,10 1 2 3 從右到左讀取 不改變原先集合順序 1 10 2 9 3 8 交換元素 改變原先集合順序 reverse i 1 while i 10 print l i end i 1 print print l ...
Python的函式式程式設計與內建函式10 函式總結
l 1 2,3 4,5 列表中的元素轉成字串模式 4.檔案處理 r w 都是讀寫模式,a 是追加方式讀寫 檔名 檔案的絕對路徑 f open test.py a encoding utf8 f.write n 這是a模式的內容 n f open test.py a encoding utf8 dat...