天天看點

Python函數式程式設計(二):常見進階函數

一個函數的參數中有函數作為參數,這個函數就為進階函數。

下面學習幾個常見進階函數。

---------------------------------------------------------------------------------------

一、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

把結果繼續和序列的下一個元素做累積計算

>>> from functools 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']      

作者:聽着music睡

出處:http://www.cnblogs.com/xqxacm/

Android交流群:38197636

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。