functional 一種程式設計正規化。
1.把計算視為函式而非指令
2.純函式式程式設計:不需要變數,沒有變數,測試簡單
3.支援高階函式,**簡潔
1.不是純函式式程式設計:允許有變數
2.支援高階函式:函式也可以作為變數傳入
3.支援閉包:有了閉包 就能返回函式
4.有限度的支援匿名函式
1.變數可以指向函式;
2.函式名就是指向函式的變數;
3.函式的引數可以接收變數;
4.高階函式:能接收函式做引數的函式
map()是 python 內建的高階函式。
它接收乙個函式 f和乙個list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。
栗子:def f(x):
return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
特點:必須接收兩個引數
栗子:編寫乙個f函式,接收x和y,返回x和y的和:
def f(x, y):呼叫 reduce(f, [1, 3, 5, 7, 9])時,reduce函式將做如下計算:return x + y
先計算頭兩個元素:f(1, 3),結果為4;上述計算實際上是對 list 的所有元素求和。雖然python內建了求和函式sum(),但是,利用reduce()求和也很簡單。再把結果和第3個元素計算:f(4, 5),結果為9;
再把結果和第4個元素計算:f(9, 7),結果為16;
再把結果和第5個元素計算:f(16, 9),結果為25;
由於沒有更多的元素了,計算結束,返回結果25。
特點:接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
栗子:從乙個list [1, 4, 6, 7, 9, 12, 17]中刪除偶數,保留奇數,首先,要編寫乙個判斷奇數的函式:
def is_odd(x):然後,利用filter()過濾掉偶數:return x % 2 == 1
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
用filter()過濾出1~100中平方根是整數的數
import math
def is_sqr(x):
t=int(math.sqrt(x))
return t*t==x
print filter(is_sqr, range(1, 101))
特點:接收乙個比較函式來實現自定義排序,比較函式的定義是,傳入兩個待比較的元素 x, y,如果 x 應該排在 y 的前面,返回 -1,如果 x 應該排在 y 的後面,返回 1。如果 x 和 y 相等,返回 0。
栗子:如果我們要實現倒序排序,只需要編寫乙個reversed_cmp函式:
def reversed_cmp(x, y):這樣,呼叫 sorted() 並傳入 reversed_cmp 就可以實現倒序排序:if x > y:
return -1
if x < y:
return 1
return 0
>>> sorted([36, 5, 12, 9, 21], reversed_cmp)[36, 21, 12, 9, 5]
廖雪峰Python教程學習筆記4 函式式程式設計
函式式程式設計就是一種抽象程度很高的程式設計正規化,其乙個特點是允許把函式本身作為引數傳入另乙個函式,還允許返回乙個函式!把函式作為引數傳入,這樣的函式稱為高階函式,函式式程式設計就是指這種高度抽象的程式設計正規化。既然變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數...
map, reduce和filter(函式式程式設計)
map可以用於對可遍歷結構的每個元素執行同樣的操作,批量操作 map lambda x x 2,1,2,3,4 1,4,9,16 map lambda x,y x y,1,2,3 5,6,7 6,8,10 在python3種輸出上述結果 result1 list map lambda x x 2,1...
python函式式程式設計模式 什麼是函式式程式設計思維?
函式式程式設計與命令式程式設計最大的不同其實在於 函式式程式設計關心資料的對映,命令式程式設計關心解決問題的步驟 這裡的對映就是數學上 函式 的概念 一種東西和另一種東西之間的對應關係。這也是為什麼 函式式程式設計 叫做 函式 式程式設計。這是什麼意思呢?假如,現在你來到 google 面試,面試官...