更新時(shí)間:2022-08-04 來(lái)源:黑馬程序員 瀏覽量:
reduce函數(shù)會(huì)對(duì)參數(shù)迭代器中的元素進(jìn)行積累。
ruduce函數(shù)的定義如下:
functools.reduce(function, iterable[, initializer])
在上述定義中,function是一個(gè)帶有兩個(gè)參數(shù)的函數(shù);第二個(gè)參數(shù)iterable是一個(gè)迭代器對(duì)象;initializer表示固定的初始值。reduce函數(shù)會(huì)依次從迭代器對(duì)象中取出每個(gè)元素,和上一次調(diào)用function的結(jié)果做為參數(shù)再次調(diào)用function函數(shù)。
在Python3中,reduce函數(shù)被放置在functools模塊中,使用時(shí)需要先引入,示例代碼如下:
from functools import reduce func = lambda x, y:x + y result = reduce(func, [1, 2, 3, 4, 5]) print(result)
在上述示例中,首先引入了fucntools模塊,然后定義了一個(gè)計(jì)算兩個(gè)數(shù)的和的匿名函數(shù)。由于在調(diào)用reduce函數(shù)時(shí)傳入了func和序列,所以程序會(huì)把序列的每個(gè)元素取出來(lái),和上次調(diào)用后的結(jié)果作為參數(shù)再次調(diào)用func函數(shù),最后將結(jié)果返回給result。
程序的運(yùn)行結(jié)果如下所示:
15
如果在調(diào)用reduce函數(shù)時(shí)傳入了initializer參數(shù),那么function函數(shù)會(huì)以迭代器中的第一個(gè)元素與initializer的和作為參數(shù)進(jìn)行調(diào)用。示例代碼如下:
from functools import reduce result = reduce(lambda x, y: x+y, [1, 2, 3, 4], 5) print(result) # 結(jié)果為 15
此外,iterable參數(shù)還可以傳入字符串類型,示例代碼如下:
from functools import reduce result = reduce(lambda x, y: x+y, ['aa', 'bb', 'cc'], 'dd') print(result) # 結(jié)果為 'ddaabbcc'
需要注意的是,reduce函數(shù)傳入的function參數(shù)不能為None。