函式式程式設計是一種抽象程式很高的程式設計正規化,純粹的函式式程式語言編寫的函式沒有變數,因此,任意乙個函式,只要輸入是確定的,輸出就是確定的,這種純函式稱之為沒有***。而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到的輸出不同,因此,這種函式是有***的。
2.1 特性
1)變數可以指向函式
函式本身也可以賦值給變數。
>>> f=abs
>>> f
infunction
abs>
>>> f
(-12)
12
2)函式名也可以是變數
abs =10
當給函式名賦值時,它就變成了乙個變數,而不能使用原來的函式功能了。
3)傳入函式
乙個函式可以接收另乙個函式作為引數,這種函式就稱之為高階函式。
# 定義函式
>>> def jia(x,y,f):
...return f(x)+f(y)
...# 呼叫函式
>>> jia(1,-4,abs)
5
2.2 map/reduce
1)map() 函式
map()函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。
>>> def f(x):
...return x*x
...# 使用map()函式
>>> l=map(f,[1,3,5,7,9])
>>> list(l)
[1, 9, 25, 49, 81]
2)reduce() 函式
reduce把乙個函式作用在乙個序列[x1, x2, x3, …]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算。
>>> from functools import reduce
>>> def jia(x,y):
...return x+y
...# reduce函式
>>> reduce(jia,[1,2,3,4,5])
15
2.3 filter
filter() 函式用於過濾序列。
和map()類似,filter()也接收乙個函式和乙個序列。和map()不同的是,filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。
# 判斷是否為偶數
>>> def odd(n):
...return n%2==0
...# 篩選出序列中的偶數
>>> list(filter(odd,[1,2,3,4,5,6,7,8,9]))
[2, 4, 6, 8]
2.4 sorted
1)sorted()函式就可以對list進行排序:
>>> sorted([34,5,323,56,12])
[5, 12, 34, 56, 323]
2)sorted()函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序,例如按絕對值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
# reverse,反序
>>> sorted([36, 5, -12, 9, -21], key=abs,reverse=true)
[36, -21, -12, 9, 5]
Python 函式式程式設計 高階函式
functional programming,函式式程式設計。python對函式式程式設計提供部分支援。對於純函式程式設計,對任一函式,只要輸入是確定的,輸出就是確定的,可稱之為無 我們知道函式的計算結果可以賦值給變數,例如x abs 5 同理,變數也可以指向函式,例如f abs。如果乙個變數指向了...
Python函式式程式設計 高階函式
高階函式 1.實參是乙個函式名 2.函式的返回值是乙個函式 函式本身也可以賦值給變數,變數也可以指向函式 f abs print f 10 傳遞的引數包括函式名 deffun x,y,f return f x f y print fun 10 23,abs map 函式接收兩個引數,乙個是函式,乙個...
Python 函式式程式設計 高階函式 sorted
排序也是在程式中經常用到的演算法。無論使用氣泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果是字串或者兩個dict呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函式抽象出來。print sorted 36,5,21,12,9,21 d anni...