Python之map/filter/reduce/lambda函數簡介

(本文大部分內容來源於此鏈接的文章菜鳥教程,我對部分內容做了一些改動,方便自己日後複習,若有侵權,請聯繫我,我會將此文刪除,謝謝)


lambda()函數

lambda函數又稱匿名函數。當使用的函數只是臨時一用,而且自身內部實現也很簡單時,就可以使用lambda函數。

下面是一個簡單的lambda函數例子:

>>> lambda x, y: x + y
<function <lambda> at 0x...>

上面的代碼中,x與y是函數的兩個參數,冒號後面的表達式x+y是函數的計算邏輯,顯然這個函數是在求兩個數的和。下面的代碼會給上面的lambda函數綁定一個名字,這樣使得調用匿名函數更方便:

>>> add = lambda x, y: x + y
>>> add
<function <lambda> at 0x000001B1E3C1E5E0>
>>> add(3, 2)
5

下面是未使用lambda函數的常規函數:

>>> def add2(x, y):
...     return x + y
...
>>> add2
<function add2 at 0x000001B1E3C1E550>
>>> add2(1, 2)
3

lambda函數使用場景

函數式編程

如,要求將一個整數列表按表內元素的絕對值,從小到大升序排列,代碼如下:

>>> list1 = [-1, 4, -2, 3, -6, 5]
>>> sorted(list1, key=lambda x: abs(x))
[-1, -2, 3, 4, 5, -6]

sorted()函數支持接收一個函數作爲參數,該參數作爲sorted()的排序依據,上述代碼中是按照列表元素的絕對值進行排序。


map()函數

語法:map(function, iterable, …)

參數:function是指定的函數,iterable是一個序列。

描述:map()會根據提供的函數function來對指定序列iterable做映射。具體是:function以序列iterable中的每一個元素作爲參數,將得到的所有返回值以一個列表形式返回。

示例代碼如下:

>>> def square(x):
...     return x**2
...
>>> list(map(square, [1,2,3,4,5]))
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1,2,3,4,5])) # 使用lambda匿名函數
[1, 4, 9, 16, 25]
>>> list(map(lambda x, y: x + y, [1,2,3], [3,2,1]))
[4, 4, 4]

filter()函數

語法:filter(function, iterable)

參數:function是判斷函數,iterable是一個序列。

描述:filter()函數用於過濾掉序列中不符合條件的元素,然後返回一個迭代器對象(若想以列表形式輸出這個迭代器,使用list()即可)。在使用filter()函數時,iterable序列中的每個元素作爲參數傳遞給function判斷函數進行判斷,然後返回True或False,最後將返回True的元素作爲輸出結果。(返回值是一個迭代器對象

示例代碼如下:

>>> def is_odd(n): # 判斷n是否爲奇數
...     return n % 2 == 1
...
>>> filter(is_odd, [1,2,3,4,5,6,7,8,9,10]) # 返回一個迭代器
<filter object at 0x000001B1E3BF09D0>
>>> list(filter(is_odd, [1,2,3,4,5,6,7,8,9,10])) # 將輸出結果轉換爲列表
[1, 3, 5, 7, 9]

reduce()函數

語法:reduce(function, iterable)

參數:function是指定的函數(參數有兩個),iterable是一個序列。

描述:reduce()將對參數序列中元素進行累積:先使用function(參數有兩個)對iterable序列中的第1、2個元素進行操作,然後將得到的結果再與第3個進行操作,然後再將得到的結果與第4個進行操作…直到與最後一個元素進行操作,最終得到一個結果。

示例代碼如下:

>>> from functools import reduce # 從functools模塊中導入reduce函數
>>> def add(x, y):  # 計算兩個數的乘法
...     return x * y
...
>>> reduce(multiply, [1,2,3,4,5])
120
>>> reduce(lambda x, y: x * y, [1,2,3,4,5])
120

(本文大部分內容來源於此鏈接的文章菜鳥教程,我對部分內容做了一些改動,方便自己日後複習,若有侵權,請聯繫我,我會將此文刪除,謝謝)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章