這篇文章給大家介紹如何分析Python中的Lambda和Map及Reduce,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)主要業(yè)務(wù)有網(wǎng)站營銷策劃、網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、小程序設(shè)計、H5技術(shù)、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當(dāng)客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過程中,公司還積累了豐富的行業(yè)經(jīng)驗、營銷型網(wǎng)站建設(shè)資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。
今天要和大家分享的是Python匿名函數(shù)(anonymous functions),也叫l(wèi)ambda函數(shù)。匿名函數(shù)的意思就是說這個函數(shù)沒有顯式的函數(shù)名,因為一般在Python中定義函數(shù)的時候都是這個樣子的,def function_name(參數(shù)列表): balabalaba。暫且把具有function_name的函數(shù)稱作常規(guī)函數(shù),而匿名函數(shù)就稱作lambda函數(shù)。匿名函數(shù)沒有顯式的函數(shù)名,但是有顯式的lambda標(biāo)志,寫了lambda的函數(shù)就可以稱作匿名函數(shù)。一般情況大家不愿意用匿名函數(shù)(因為他
們不會用!),但是無論是Python的書還是網(wǎng)絡(luò)教程,都會講這個,而且是開始比較基礎(chǔ)的部分,而匿名函數(shù)剛開始學(xué)又比較抽象,所以有必要給大家安利一下這個坑到底是什么!下面開始栗子講解.
# lambda
"""
>>> def function_1(x, y):
return x + y
>>> function_2 = lambda x,y: x + y
>>>
>>> function_1(1,2)
3
>>> function_2(1,2)
3
"""
通過這個栗子我們發(fā)現(xiàn),function_1和function_2都可以用相同方式來調(diào)用。
區(qū)別在于匿名函數(shù)沒有return語句,而匿名函數(shù)的返回值就是它定義的表達(dá)式。
匿名函數(shù)的生存周期就是在當(dāng)前行,就是在那定義的,就在那里用,過了這村,后面就再不用他了。這也暗示了匿名函數(shù)為啥沒有函數(shù)名,因為不會再用它啊,取個名字也是浪費感情。
# map()函數(shù)說明
一般和lambda表達(dá)式同時出現(xiàn)的還有map和reduce函數(shù),接下來我們再看看
這是什么鬼。你可能聽說過Hadoop里面的Map-Reduce過程,這里的和那個的
原理是類似的。map的意思不太好翻譯,這樣理解一下,有一個函數(shù)A,一個需要計算的對象B,把A map一下到B那么都對B里的每一個元素都使用了函數(shù)A。
接下來舉個計算三角函數(shù)值的栗子。
import math
def function_5(x):
return math.sin(x)
>>> list_1 = [-math.pi/4, math.pi/4]
>>> map(function_5, list_1)
[-0.7071067811865475, 0.7071067811865475]
如果我們不用常規(guī)函數(shù),而是用lambda表達(dá)式,則
>>> map(lambda x: math.sin(x), list_1)
原來要用3行的代碼,現(xiàn)在只要1行就可以搞定。
# reduce函數(shù)
如果我們直接reduce剛才定義的函數(shù),看下會發(fā)生什么。
>>> reduce(function_5, list_a)
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
reduce(function_5, list_a)
TypeError: function_5() takes exactly 1 argument (2 given)
TypeError,類型錯誤,它說function_5本來只要1個參數(shù),而你給了2個。
哪里來的兩個?因為我們的list_1中有2個元素,就是這么來的。
# reduce的語法是:
reduce(function, seq)
reduce會根據(jù)function的表達(dá)式,來依次計算seq中的元素。
還是舉個栗子好了。
>>> reduce(lambda x,y: x+y, [47,11,42,13])
113
113 <== (((47 + 11) + 42) + 13)
# 計算一下1到100的和。
>>> reduce(lambda x, y: x+y, range(1,101))
5050
剛才我們的map函數(shù)返回值是多個,而reduce則只返回一個值。注意這里的區(qū)別。
# 是不是很簡單 ?
在Python 3里面,reduce函數(shù)被放到了functools模塊里面,要用的話,需要from functools import reduce。
關(guān)于如何分析Python中的Lambda和Map及Reduce就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享名稱:如何分析Python中的Lambda和Map及Reduce
分享路徑:http://www.chinadenli.net/article28/ighocp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、品牌網(wǎng)站設(shè)計、微信公眾號、用戶體驗、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)