一 map()函數(shù)
map()函數(shù)是python內(nèi)置的高階函數(shù)逛万,它要接收一個(gè)函數(shù)f和一個(gè)list泳猬,并通過函數(shù)f依次作用在list的每一個(gè)元素上,得到一個(gè)新的list并返回宇植。
例如得封,對于list ? num = [1,2,3,4,5,6,7,8,9]
def f(x):
? ? ? ?return x*x
使用map(f,num)輸出結(jié)果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]
二 reduce()函數(shù)
reduce()函數(shù)也是Python內(nèi)置的一個(gè)高階函數(shù)。reduce()函數(shù)接收的參數(shù)和 map()類似指郁,一個(gè)函數(shù) f忙上,一個(gè)list,但行為和 map()不同坡氯,reduce()傳入的函數(shù) f 必須接收兩個(gè)參數(shù)晨横,reduce()對list的每個(gè)元素反復(fù)調(diào)用函數(shù)f,并返回最終結(jié)果值箫柳。
例如手形,編寫一個(gè)f函數(shù),接收x和y悯恍,返回x和y的和:
def f(x, y):
? ? ? ?return x + y
調(diào)用reduce(f, [1, 3, 5, 7, 9])時(shí)库糠,reduce函數(shù)將做如下計(jì)算:
先計(jì)算頭兩個(gè)元素:f(1, 3),結(jié)果為4;
再把結(jié)果和第3個(gè)元素計(jì)算:f(4, 5)瞬欧,結(jié)果為9贷屎;
再把結(jié)果和第4個(gè)元素計(jì)算:f(9, 7),結(jié)果為16艘虎;
再把結(jié)果和第5個(gè)元素計(jì)算:f(16, 9)唉侄,結(jié)果為25;
由于沒有更多的元素了野建,計(jì)算結(jié)束属划,返回結(jié)果25。
reduce()還可以接收第3個(gè)可選參數(shù)候生,作為計(jì)算的初始值同眯。如果把初始值設(shè)為100,計(jì)算:
reduce(f, [1, 3, 5, 7, 9], 100)
結(jié)果將變?yōu)?25唯鸭,因?yàn)榈谝惠営?jì)算是:
計(jì)算初始值和第一個(gè)元素:f(100, 1)须蜗,結(jié)果為101。