高階函數
高階函數就是把函數當做參數傳入的一種函數,如下,把 abs() 這個内置函數傳入到自定義的函數中,先求絕對值再相加:
In [2]: def fun(x, y, f):
...: return f(x) + f(y)
...:
In [3]: fun(-2,12,abs) #abs是内置函數,傳遞一個内置函數-絕對值
Out[3]: 14
Python 内置的高階函數有:map() 、reduce() 、filter() 、sorted()
map() 函數:
格式:
map(function, iterable, ...)
function -- 函數,有兩個參數
iterable -- 一個或多個序列
In [7]: def fun(x):
...: return x + x
In [8]: list1=[1,2,3,4]
In [9]: map(fun,list1)
Out[9]: [2, 4, 6, 8]
In [14]: list2=[-11,-2,0,1]
In [15]: map(abs,list2)
Out[15]: [11, 2, 0, 1]
reduce() 函數:
reduce() 接收兩個參數,第一個是函數(這個函數必須定義兩個形參),第二個是序列,第一次執行時,先将序列中的前兩個元素交給函數處理;第二次執行時,将前面的處理結果和序列中的第三個元素交給函數處理,以此類推。如下,先定義一個函數 add() ,當我們執行 reduce(add, [1, 2, 3, 4, 5]) 時,執行流程如下:
先将 1 和 2 交給 add() 函數處理,得到結果 3
再将 3 與 3 交給 add() 函數處理,得到結果 6
再将 6 與 4 交給 add() 函數處理,得到結果 10
再将 10 與 5 交給 add() 函數處理,得到結果 15
其實就是相當于 1 + 2 + 3 + 4 + 5
In [22]: def add(x,y):
...: return x + y
...:
In [23]: reduce(add,[1,2,3,4,5])
Out[23]: 15
In [26]: reduce(add,range(0,101))
Out[26]: 5050
filter() 函數:
filter() 函數用于過濾序列,過濾掉不符合條件的元素,傳回由符合條件元素組成的新清單。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後傳回 True 或 False,最後将傳回 True 的元素放到新清單中。
以下是 filter() 方法的文法:
filter(function, iterable)
參數
function -- 判斷函數。
iterable -- 可疊代對象。
傳回值
傳回清單。
執行個體:
過濾出清單中的所有奇數:
math方法:
In [36]: math.pow(2,3) #傳回x 的 y次方
Out[36]: 8.0
In [38]: math.sqrt(100) #傳回100的平方根,即10的平方就是100,那10就是100的平方根
Out[38]: 10.0
In [39]: math.sqrt(10)
Out[39]: 3.1622776601683795
In [40]: math.floor(5.9) #傳回不大于x(小于等于x)的一個整數
Out[40]: 5.0
In [46]: math.fabs(-123) #傳回x的絕對值
Out[46]: 123.0
In [47]: math.fmod(10,3) #x%y 取餘數
Out[47]: 1.0
sorted()
sorted() 函數對所有可疊代的對象進行排序操作。
sort 與 sorted 差別:
sort 是應用在 list 上的方法,sorted 可以對所有可疊代的對象進行排序操作。
list 的 sort 方法傳回的是對已經存在的清單進行操作,而内建函數 sorted 方法傳回的是一個新的 list,而不是在原來的基礎上進行的操作。
文法
sorted 文法:
sorted(iterable[, cmp[, key[, reverse]]])
參數說明:
cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可疊代對象中取出,此函數必須遵守的規則為,大于則傳回1,小于則傳回-1,等于則傳回0。
key -- 主要是用來進行比較的元素,隻有一個參數,具體的函數的參數就是取自于可疊代對象中,指定可疊代對象中的一個元素來進行排序。
reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(預設)。
In [59]: L=[('b',2),('a',1),('c',3),('d',4)]
In [60]: sorted(L,key=lambda x:x[1]) #lambda 為匿名函數,x為參數,将L傳遞給x,然後取出x[1] 作為排序處理
Out[60]: [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
In [62]: students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
In [63]: sorted(students,key=lambda x:x[2],reverse=False) #reverse=False 這個是升序
Out[63]: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
練習:
本文轉自方向對了,就不怕路遠了!51CTO部落格,原文連結:http://blog.51cto.com/jacksoner/2058552 ,如需轉載請自行聯系原作者