一個函數的參數中有函數作為參數,這個函數就為進階函數。
下面學習幾個常見進階函數。
---------------------------------------------------------------------------------------
一、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
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。