python高阶函数、map reduce 自己如何去定义_「python」高阶函数map、reduce的介绍
Python
map
先看官方介紹:
map(function, iterable, ...)Return an iterator that applies function to every item of iterable, yielding the results.
map函數(shù)至少使用2個參數(shù):(函數(shù),可迭代對象),返回的結(jié)果是個迭代器。實現(xiàn)的作用是將前面的函數(shù)依次在后面的可迭代對象上執(zhí)行。
>>> def ljds(x):... return x+x...>>> a=[0,1,2,3,4,5,6,7,8,9]>>> b=map(ljds,a)>>> next(b)0>>> next(b)2>>> next(b)4>>> list(b)[6, 8, 10, 12, 14, 16, 18]>>>
代碼介紹:函數(shù)ljds,參數(shù)x,作用是返回一個x加上自己的值。ljds(2)結(jié)果是4,ljds('梁家大叔')結(jié)果是'梁家大叔梁家大叔'。很基礎(chǔ),解釋的有點多余....
a是個列表(可迭代對象)。當(dāng)執(zhí)行了3次next(b)后,(b是迭代器)此時的結(jié)果只有后面7個元素了,因此list(b)只輸出了3-9的ljds(x)。
map還可以接受更多的參數(shù),但第一位的函數(shù)只有一個,后面可以繼續(xù)跟可迭代對象:
>>> def ljds(x,y):... return (x+x,y+y)...>>> a=[1,2,3,4,5]>>> b=[11,22,33,44,55]>>> c=map(ljds,a,b)>>> list(c)[(2, 22), (4, 44), (6, 66), (8, 88), (10, 110)]>>>
這個就沒必要解釋了。
reduce
官方介紹:
functools.reduce(function, iterable[, initializer])Apply function of two arguments cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value.
值得一提的是reduce在python2中可以直接使用,在python3中已經(jīng)放在了fucntools模塊里,用之前要先導(dǎo)入。
reduce調(diào)用的函數(shù)需要兩個參數(shù),依次使用可迭代對象的元素作為這個函數(shù)的參數(shù),函數(shù)執(zhí)行的結(jié)果和下一個元素再作為參數(shù)執(zhí)行函數(shù),依此類推。如果第一次執(zhí)行時設(shè)置了initial,則是initial和第一個元素作為第一次執(zhí)行的參數(shù)。可能容易暈,直接看代碼演示吧。
以前學(xué)過一篇課文是講數(shù)學(xué)家高斯的,他小時候做數(shù)學(xué)題,1+2+3……一直加到100,結(jié)果是多少,這題用reduce操作應(yīng)該是這樣的:
>>> from functools import reduce>>> def ljds(x,y):... return x+y...>>> a=[x for x in range(101)]>>> reduce(ljds,a)5050>>>
代碼解釋:
導(dǎo)入reduce,創(chuàng)建一個函數(shù)ljds,需要2個參數(shù)x,y,返回x+y的結(jié)果。
a列表是數(shù)字從0到100,那么reduce執(zhí)行的結(jié)果就是:
第一次:因沒設(shè)置initial,所以ljds的參數(shù)就是列表a的最前面的2個元素,即0和1,相加結(jié)果是1。
第二次:第一次的結(jié)果1作為參數(shù),第3個元素2也作為參數(shù),即ljds(1,2),結(jié)果是3.
第三次:ljds(3,3)
……
一直到結(jié)束。
總結(jié)
以上是生活随笔為你收集整理的python高阶函数、map reduce 自己如何去定义_「python」高阶函数map、reduce的介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python问题3——爬虫编码问题
- 下一篇: 调用函数,求a+aa+aaa+....+