這篇文章給大家介紹如何分析Python中的Lambda和Map及Reduce,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)主要業(yè)務(wù)有網(wǎng)站營銷策劃、網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、小程序設(shè)計(jì)、H5技術(shù)、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當(dāng)客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過程中,公司還積累了豐富的行業(yè)經(jīng)驗(yàn)、營銷型網(wǎng)站建設(shè)資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。
今天要和大家分享的是Python匿名函數(shù)(anonymous functions),也叫l(wèi)ambda函數(shù)。匿名函數(shù)的意思就是說這個(gè)函數(shù)沒有顯式的函數(shù)名,因?yàn)橐话阍赑ython中定義函數(shù)的時(shí)候都是這個(gè)樣子的,def function_name(參數(shù)列表): balabalaba。暫且把具有function_name的函數(shù)稱作常規(guī)函數(shù),而匿名函數(shù)就稱作lambda函數(shù)。匿名函數(shù)沒有顯式的函數(shù)名,但是有顯式的lambda標(biāo)志,寫了lambda的函數(shù)就可以稱作匿名函數(shù)。一般情況大家不愿意用匿名函數(shù)(因?yàn)樗?/p>
們不會(huì)用?。?,但是無論是Python的書還是網(wǎng)絡(luò)教程,都會(huì)講這個(gè),而且是開始比較基礎(chǔ)的部分,而匿名函數(shù)剛開始學(xué)又比較抽象,所以有必要給大家安利一下這個(gè)坑到底是什么!下面開始栗子講解.
# 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
"""
通過這個(gè)栗子我們發(fā)現(xiàn),function_1和function_2都可以用相同方式來調(diào)用。
區(qū)別在于匿名函數(shù)沒有return語句,而匿名函數(shù)的返回值就是它定義的表達(dá)式。
匿名函數(shù)的生存周期就是在當(dāng)前行,就是在那定義的,就在那里用,過了這村,后面就再不用他了。這也暗示了匿名函數(shù)為啥沒有函數(shù)名,因?yàn)椴粫?huì)再用它啊,取個(gè)名字也是浪費(fèi)感情。
# map()函數(shù)說明
一般和lambda表達(dá)式同時(shí)出現(xiàn)的還有map和reduce函數(shù),接下來我們?cè)倏纯?/p>
這是什么鬼。你可能聽說過Hadoop里面的Map-Reduce過程,這里的和那個(gè)的
原理是類似的。map的意思不太好翻譯,這樣理解一下,有一個(gè)函數(shù)A,一個(gè)需要計(jì)算的對(duì)象B,把A map一下到B那么都對(duì)B里的每一個(gè)元素都使用了函數(shù)A。
接下來舉個(gè)計(jì)算三角函數(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ù),看下會(huì)發(fā)生什么。
>>> reduce(function_5, list_a)
Traceback (most recent call last):
File "", line 1, in
reduce(function_5, list_a)
TypeError: function_5() takes exactly 1 argument (2 given)
TypeError,類型錯(cuò)誤,它說function_5本來只要1個(gè)參數(shù),而你給了2個(gè)。
哪里來的兩個(gè)?因?yàn)槲覀兊膌ist_1中有2個(gè)元素,就是這么來的。
# reduce的語法是:
reduce(function, seq)
reduce會(huì)根據(jù)function的表達(dá)式,來依次計(jì)算seq中的元素。
還是舉個(gè)栗子好了。
>>> reduce(lambda x,y: x+y, [47,11,42,13])
113
113 <== (((47 + 11) + 42) + 13)
# 計(jì)算一下1到100的和。
>>> reduce(lambda x, y: x+y, range(1,101))
5050
剛才我們的map函數(shù)返回值是多個(gè),而reduce則只返回一個(gè)值。注意這里的區(qū)別。
# 是不是很簡(jiǎn)單 ?
在Python 3里面,reduce函數(shù)被放到了functools模塊里面,要用的話,需要from functools import reduce。
關(guān)于如何分析Python中的Lambda和Map及Reduce就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。