python筆記5:函數式編程
阿新 • • 發佈:2017-11-11
res () print 作用 map() 完成 false 逗號 單行函數
sorted():
5 函數式編程(即高階函數,將函數作為參數傳入)
map():
map()函數接收兩個參數,一個是傳入函數,一個是Iterable,map將傳入函數依次作用到序列的每個元素,並把結果作為新的Iterator返回。
如:map(f, [x1, x2, x3, x4]) = [f(x1),f(x2),f(x3),f(x4)] -->把f(x)作用在list的每一個元素並將結果生成一個新的list
reduce():
如:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) -->將f(x)作用在一個序列上,並將結果繼續和序列的下一個元素做累積計算
filter():
filter()用於過濾序列,
如:filter(f, [x1, x2, x3, x4]) -->把篩選函數依次作用於序列的每個元素,然後根據返回值是True/False決定保留/丟棄該元素。
sorted():
sorted()用於排序 (內幕:對於元素 x,y,若x < y,則返回‐1,若x == y,返回0,若x > y,返回1。這樣,排序算法就不用關心具體的比較過程,而是根據比較結果直接排序。)
sorted(iterable , key=函數 , reverse=True) --> key函數作用於list中的每個元素,根據其返回結果進行排序,第三個參數為反向排序時使用。
例子:L = [(‘Bob‘, 75), (‘Adam‘, 92), (‘Bart‘, 66), (‘Lisa‘, 88)] print(sorted(L,key=lambda i:i[0])) #按名字排序 print(sorted(L,key=lambda i:i[1])) #按成績排序
閉包 Closure:
閉包 Closure用於將函數作為結果值返回
返回閉包(某函數)時牢記:該函數並未執行,返回函數中不要引用任何可能會變化的變量。(即包在裏面的函數,不要引用外部函數的任何循環變量)
如果一定要引用循環變量,則再創建一個函數,用該函數的參數綁定循環變量當前的值
lambda函數:
匿名函數(lambda函數):
(語法)lambda [arg1 [,arg2,.....argn]]:expression
如:lambda x: x * x --> 冒號前是參數,可以有多個,用逗號隔開,冒號右邊的返回值。
易錯:fs = [(lambda n: i + n) for i in range(10)]與 fs = [(lambda n, i=i : i + n) for i in range(10)]
註意:1.使用lambda,lambda內不要包含循環;
2.lambda只是為了減少單行函數的定義而存在的;
3.可用for...in...if來完成的,堅決不用lambda。
python筆記5:函數式編程