1. 程式人生 > >python筆記5:函數式編程

python筆記5:函數式編程

res () print 作用 map() 完成 false 逗號 單行函數

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:函數式編程