python筆記5:函數式編程

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()用於過濾序列,express

如: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內不要包含循環;spa

   2.lambda只是爲了減小單行函數的定義而存在的;code

   3.可用for...in...if來完成的,堅定不用lambda。blog

相關文章
相關標籤/搜索