慕課網(wǎng)學(xué)習(xí)過程中,發(fā)現(xiàn)了很多有意思的高階函數(shù):
reduce()函數(shù)也是Python內(nèi)置的一個高階函數(shù)州刽。reduce()函數(shù)接收的參數(shù)和 map()類似达舒,一個函數(shù) f只嚣,一個list,但行為和 map()不同,reduce()傳入的函數(shù) f 必須接收兩個參數(shù)胰舆,reduce()對list的每個元素反復(fù)調(diào)用函數(shù)f骚露,并返回最終結(jié)果值。
例如缚窿,編寫一個f函數(shù)棘幸,接收x和y,返回x和y的和:
def f(x, y):
return x + y
調(diào)用?reduce(f, [1, 3, 5, 7, 9])時倦零,reduce函數(shù)將做如下計算:
先計算頭兩個元素:f(1, 3)误续,結(jié)果為4;
再把結(jié)果和第3個元素計算:f(4, 5)扫茅,結(jié)果為9蹋嵌;
再把結(jié)果和第4個元素計算:f(9, 7),結(jié)果為16葫隙;
再把結(jié)果和第5個元素計算:f(16, 9)栽烂,結(jié)果為25;
由于沒有更多的元素了恋脚,計算結(jié)束腺办,返回結(jié)果25。
還有 map()函數(shù):
map()是 Python 內(nèi)置的高階函數(shù)糟描,它接收一個函數(shù) f和一個list怀喉,并通過把函數(shù) f 依次作用在 list 的每個元素上,得到一個新的 list 并返回蚓挤。
例如磺送,對于list [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果希望把list的每個元素都作平方,就可以用map()函數(shù):
因此灿意,我們只需要傳入函數(shù)f(x)=x*x,就可以利用map()函數(shù)完成這個計算:
def f(x):
return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
輸出結(jié)果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]
python中有很多函數(shù)崇呵,利用庫函數(shù)可以靈活的解決很多問題缤剧,當(dāng)然,解決這些問題域慷,需要靈活的且熟練的掌握python的庫函數(shù)
假設(shè)用戶輸入的英文名字不規(guī)范荒辕,沒有按照首字母大寫,后續(xù)字母小寫的規(guī)則犹褒,請利用map()函數(shù)抵窒,把一個list(包含若干不規(guī)范的英文名字)變成一個包含規(guī)范英文名字的list:
輸入:['adam', 'LISA', 'barT']
輸出:['Adam', 'Lisa', 'Bart']
?不會了怎么辦
format_name(s)函數(shù)接收一個字符串,并且要返回格式化后的字符串叠骑,利用map()函數(shù)李皇,就可以輸出新的list。
參考代碼:
def format_name(s):
return s[0].upper() + s[1:].lower()
print map(format_name, ['adam', 'LISA', 'barT'])
例如上文中的例子:大小寫的轉(zhuǎn)化在java語言中可能函數(shù)的定義比較復(fù)雜宙枷,但是在python中掉房,由于有庫函數(shù)的支持茧跋,轉(zhuǎn)換變得非常簡單,但是卓囚,不太容易想到瘾杭。