其實函式可以作為變數,之前學過c++,對於這種用法並不奇怪。無非就是函式充當變數,可以傳入函式而已。
下面分別介紹python
中常見的高階函式:map/reduce
,filter
,sorted
map()
函式接收兩個函式,乙個是函式,乙個是序列(可迭代均可),map
將傳入的函式依次作用到序列的每個元素,並把結果作為新的list
返回
舉個例子:將 list 中所有的數字轉化為字串:
>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce()
把乙個函式作用在乙個序列[x1, x2, x3.....] 上,這個必須接收兩個函式,reduce
將結果和序列的下一元素做累積計算
例子1:將序列 [1, 3, 5, 7, 9] 變換成整數 13579。
>>>reduce(lambda x, y : x * 10 + y, [1, 3, 5, 7, 9])
13579
filter()
函式用於過濾序列。filter()
接收乙個函式和乙個序列。與 map() 不同的是,filter()
把傳入的函式依次作用於每個元素,然後根據返回值是true
或false
決定保留還是丟棄該元素。
例子: 將乙個序列中的空字元刪掉。
>>>filter(lambda s : s and s.strip(), ['a', '', 'b', none, 'c', ' '])
['a', 'b', 'c']
>>>sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]
傳入自定義函式可以實現自定義排序。
例子1:排序應該忽略大小寫,按照字母序排序。
def cmp_ignore_case(s1, s2):
u1 = s1.upper()
u2 = s2.upper()
if u1 < u2:
return -1
if u1 > u2:
return 1
return 0
>>> sorted(['bob', 'about', 'zoo', 'credit'], lambda s1, s2 : s1.upper() -s2.upper())
['about', 'bob', 'credit', 'zoo']
另外數字反序有個很好的方法:
sorted([36, 5, 12, 9, 21][::-1]
python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...
Python高階 函式高階
閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...
python 函式 高階函式
filter 函式是 python 內建的另乙個有用的高階函式,filter 函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如判斷奇偶數 def...