Python 入門筆記是我從 IMOOC 上學習之後做的小結。初始目的當然是爲了再複習一遍,以及保存。同時,若能讓更多的初學者受一點點的益處,那我也會感到欣慰。
我學python的最終目的是用其做圖像處理應用。就目前的學習程度遠不能達到此目的,所以,繼續進階學習是很有必要的。
處於此目的,我邊學習,邊做博客筆記。
首先我們學習 函數式編程。學習內容主要包括高階函數、閉包和裝飾器。本節(One)學習高階函數,下一節(Two)學習閉包和裝飾器。
高階函數
高階函數就是指其參數也可以是函數的函數。
來看看如下兩個例子:
f = len
print f([-20,5,12])
len = range
print len(2,8,2)
上面的輸出分別爲 3 和 [2, 4, 6, 8]。所以,在python 裏,變量可以指向一個函數,而且函數名其實是指向函數的變量。再來看一個更生動的例子,把函數作爲了參數:
import math
def add(x, y, func):
return func(x) + func(y)
print add(16, -4, abs)
print add(25, 16, math.sqrt)
此時輸出分別爲 20 和 9。
map( ) 函數
map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回。
def format_str(s):
return s[0].upper() + s[1:].lower()
print map(format_str, ['pHoEnix', 'trEE', 'SKY'])
輸出爲 ['Phoenix', 'Tree', 'Sky']。
reduce( ) 函數
reduce 不同於 map 的是,首先它必須有兩個輸入參數,其次它是將 list 前面的元素按照 f 函數運算後的結果,與下一個元素繼續按照 f 函數計算。
如果 reduce 含有第三個元素,這個元素就是整個計算的初始值。
def add(x, y):
return x+y
print reduce(add), [2,4,6,8,10])
filter( ) 函數
filter 需要一個 f 函數和 list 作爲輸入參數,其中函數 f 的作用是對每個元素進行判斷,返回 True或 False,filter() 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新 list。直接來看例子:
用filter 濾出百位數和個位數相同的所有三位整數。
def is_xYx(num):
if num/100 == num%10:
return num
print filter(is_xYx, range(100,1000))
sorted 函數可對 list 按照參數 f (x, y) 函數的定義進行新的排序。也就是說,f 是一個比較函數,而且要求若 x 應該在 y 之前時,f 輸出爲 1;若 x 應該在 y 之後時,f 輸出爲 -1;x 和 y 相等時,輸出爲 0。
我們來看一段實現忽略大小寫排序的算法。
def cmp_ignore_case(s1, s2):
if s1[0].lower() < s2[0].lower():
return -1
if s1[0].lower() > s2[0].lower():
return 1
return 0
print sorted(['phoenix', 'Tree', 'sky', 'Rui','feng'], cmp_ignore_case)
輸出爲 ['feng', 'phoenix', 'Rui', 'sky', 'Tree']