乙個函式的引數中有函式作為引數,這個函式就為高階函式。
下面學習幾個常見高階函式。
一、map()
傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator
返回
舉例:有乙個函式f(x)=x2,要把這個函式作用在乙個list[1, 2, 3, 4, 5, 6, 7, 8, 9]
上
>>>def f(x):...
return x *x
...>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9
])>>>list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
即list每乙個元素都執行了函式f的操作
二、filter()
傳入的函式依次作用於每個元素,然後根據返回值是true
還是false
決定保留還是丟棄該元素
和map()類似,不過這裡就要求函式的返回值必須是布林型
舉例:
在乙個list中,刪掉偶數,只保留奇數def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [
1, 2, 4, 5, 6, 9, 10, 15
]))# 結果: [
1, 5, 9, 15]
把乙個序列中的空字串刪掉,可以這麼寫:def not_empty(s):
return
s and s.strip()
list(filter(not_empty, ['a
', '', '
b', none, '
c', '
']))
# 結果: ['a
', '
b', '
c']
三、reduce()
乙個函式作用在乙個序列[x1, x2, x3, ...]
上,這個函式必須接收兩個引數,reduce
把結果繼續和序列的下乙個元素做累積計算
舉例:
>>> fromfunctools import reduce
>>>def add(x, y):
...
return x +y
...>>> reduce(add, [1, 3, 5, 7, 9
])25
過程就是先計算1+3 返回4 ,再根據這個結果+5 ,依次計算,就相當於1+3+5+7+9=25
四、sorted()
排序函式,數字按有小到大排列,字串由ascii大小排列
1、基礎用法:
>>> sorted([36, 5, -12, 9, -21])[-21, -12, 5, 9, 36]
>>> sorted(['bob', '
about
', '
zoo', '
credit'])
['credit
', '
zoo', '
about
', '
bob']
2、函式key引數用法:
即將元素先按key對應的函式乙個個處理完之後在進行排序
下面,先將list的元素乙個個絕對值處理,然後排序
sorted()函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序,例如按絕對值大小排序:>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
下面,先將list的元素字母都小寫,然後排序
>>> sorted(['bob', '
about
', '
zoo', '
credit
'], key=str.lower)['
about
', '
bob', '
credit
', '
zoo']
3、函式reverse引數用法,是否結果反轉
>>> sorted(['bob', '
about
', '
zoo', '
credit
'], key=str.lower, reverse=true)['
zoo', '
credit
', '
bob', '
about
']
Python函式式程式設計(二) 常見高階函式
乙個函式的引數中有函式作為引數,這個函式就為高階函式。下面學習幾個常見高階函式。一 map 傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回 舉例 有乙個函式f x x2,要把這個函式作用在乙個list 1,2,3,4,5,6,7,8,9 上 def f x return x...
Python之函式式程式設計(二)
要點 外部巢狀作用域 什麼是閉包?什麼是函式裝飾器?函式裝飾器的實現原理?裝飾器中關於函式引數的體現 外部巢狀作用域 通過對python函式作用域的學習,可以了解python函式中擁有四大變數並通過legb法則負責不同範圍的作用域,分別為區域性作用域 local 外部巢狀作用域 enclsing 全...
函式式程式語言python 函式式程式設計
函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...