Python 函式式程式設計 01 高階函式

2021-08-21 09:11:01 字數 1882 閱讀 1249

函式式程式設計是一種抽象程式很高的程式設計正規化,純粹的函式式程式語言編寫的函式沒有變數,因此,任意乙個函式,只要輸入是確定的,輸出就是確定的,這種純函式稱之為沒有***。而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到的輸出不同,因此,這種函式是有***的。

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...