幾個特殊的函數(待補充)
python是支持多種范型的語言,可以進行所謂函數式編程,其突出體現在有這么幾個函數: filter、map、reduce、lambda、yield
lambda
>>> g = lambda x,y:x+y #x+y,并返回結果>>> g(3,4)7>>> (lambda x:x**2)(4) #返回4的平方16
lambda函數的使用方法:
在lambda后面直接跟變量
變量后面是冒號
冒號后面是表達式,表達式計算結果就是本函數的返回值
冒號后面是表達式,表達式計算結果就是本函數的返回值
比如,要打印一個list,里面依次是某個數字的1次方,二次方,三次方,四次方。用lambda可以這樣做:
>>> lamb = [ lambda x:x,lambda x:x**2,lambda x:x**3,lambda x:x**4 ]>>> for i in lamb:... print i(3),... 3 9 27 81
map
map()是python的一個內置函數,它的基本樣式是:
map(func,seq)
func是一個函數,seq是一個序列對象。在執行的時候,序列對象中的每個元素,按照從左到右的順序,依次被取出來,并放入
到func那個函數里面,并將func的返回值依次存到一個list中。如
>>> items = [1,2,3,4,5]>>> squared = []>>> for i in items:... squared.append(i**2)... >>> squared[1, 4, 9, 16, 25]>>> def sqr(x): return x**2... >>> map(sqr,items)[1, 4, 9, 16, 25]>>> map(lambda x: x**2, items)[1, 4, 9, 16, 25]>>> [ x**2 for x in items ] #這個我最喜歡了,一般情況下速度足夠快,而且可讀性強[1, 4, 9, 16, 25]
要點:
對iterable中的每個元素,依次應用function的方法(本質上就是一個for循環)
將所有結果返回一個list
如果參數很多,則對那些參數并行執行function
繼續下面兩個例子:
>>> lst1 = [1,2,3,4,5]>>> lst2 = [6,7,8,9,0]>>> map(lambda x,y: x+y, lst1,lst2) #將兩個列表中的對應項加起來,并返回一個結果列表[7, 9, 11, 13, 5]
>>> lst1 = [1,2,3,4,5]>>> lst2 = [6,7,8,9,0]>>> lst3 = [7,8,9,2,1]>>> map(lambda x,y,z: x+y+z, lst1,lst2,lst3)[14, 17, 20, 15, 6]
可以看到map函數的強大和簡潔。如果使用for循環將會很繁瑣
reduce
直接看例子:
>>> reduce(lambda x,y: x+y,[1,2,3,4,5])15
reduce函數的計算方式是將列表中的元素累加,((((1+2)+3)+4)+5)=15 與map函數相比較就可以看出兩者之間的區別。map是上下運算,reduce是橫著逐個元素進行運算。
reduce含可以接受第三個值作為初始值:例如
>>> reduce(lambda x,y: x+y,[1,2,3,4,5],100)115
新聞熱點
疑難解答