溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Python中的Lambda和Map及Reduce

發(fā)布時間:2021-12-09 11:21:07 來源:億速云 閱讀:136 作者:柒染 欄目:大數據

這篇文章給大家介紹如何分析Python中的Lambda和Map及Reduce,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

今天要和大家分享的是Python匿名函數(anonymous functions),也叫l(wèi)ambda函數。匿名函數的意思就是說這個函數沒有顯式的函數名,因為一般在Python中定義函數的時候都是這個樣子的,def function_name(參數列表): balabalaba。暫且把具有function_name的函數稱作常規(guī)函數,而匿名函數就稱作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
"""

通過這個栗子我們發(fā)現,function_1和function_2都可以用相同方式來調用。

區(qū)別在于匿名函數沒有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]

如果我們不用常規(guī)函數,而是用lambda表達式,則

>>> map(lambda x: math.sin(x), list_1)

原來要用3行的代碼,現在只要1行就可以搞定。

# reduce函數

如果我們直接reduce剛才定義的函數,看下會發(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個參數,而你給了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則只返回一個值。注意這里的區(qū)別。

# 是不是很簡單 ?

在Python 3里面,reduce函數被放到了functools模塊里面,要用的話,需要from functools import reduce。

關于如何分析Python中的Lambda和Map及Reduce就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI