您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何分析Python中的Lambda和Map及Reduce,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
今天要和大家分享的是Python匿名函數(anonymous functions),也叫lambda函數。匿名函數的意思就是說這個函數沒有顯式的函數名,因為一般在Python中定義函數的時候都是這個樣子的,def function_name(參數列表): balabalaba。暫且把具有function_name的函數稱作常規函數,而匿名函數就稱作lambda函數。匿名函數沒有顯式的函數名,但是有顯式的lambda標志,寫了lambda的函數就可以稱作匿名函數。一般情況大家不愿意用匿名函數(因為他
們不會用!),但是無論是Python的書還是網絡教程,都會講這個,而且是開始比較基礎的部分,而匿名函數剛開始學又比較抽象,所以有必要給大家安利一下這個坑到底是什么!下面開始栗子講解.
# 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
"""
通過這個栗子我們發現,function_1和function_2都可以用相同方式來調用。
區別在于匿名函數沒有return語句,而匿名函數的返回值就是它定義的表達式。
匿名函數的生存周期就是在當前行,就是在那定義的,就在那里用,過了這村,后面就再不用他了。這也暗示了匿名函數為啥沒有函數名,因為不會再用它啊,取個名字也是浪費感情。
# map()函數說明
一般和lambda表達式同時出現的還有map和reduce函數,接下來我們再看看
這是什么鬼。你可能聽說過Hadoop里面的Map-Reduce過程,這里的和那個的
原理是類似的。map的意思不太好翻譯,這樣理解一下,有一個函數A,一個需要計算的對象B,把A map一下到B那么都對B里的每一個元素都使用了函數A。
接下來舉個計算三角函數值的栗子。
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]
如果我們不用常規函數,而是用lambda表達式,則
>>> map(lambda x: math.sin(x), list_1)
原來要用3行的代碼,現在只要1行就可以搞定。
# reduce函數
如果我們直接reduce剛才定義的函數,看下會發生什么。
>>> 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個參數,而你給了2個。
哪里來的兩個?因為我們的list_1中有2個元素,就是這么來的。
# reduce的語法是:
reduce(function, seq)
reduce會根據function的表達式,來依次計算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函數返回值是多個,而reduce則只返回一個值。注意這里的區別。
# 是不是很簡單 ?
在Python 3里面,reduce函數被放到了functools模塊里面,要用的話,需要from functools import reduce。
關于如何分析Python中的Lambda和Map及Reduce就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。