天天看點

高階函數

高階函數

高階函數就是把函數當做參數傳入的一種函數,如下,把 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)]

練習:

版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任

本文轉自 jiekegz  51CTO部落格,原文連結:http://blog.51cto.com/jacksoner/2058552