高階函數:就是把函數當成參數傳遞的一種函數;例如
注解:
1.調用add函數,分別執行abs(-8)和abs(11),分別計算出他們的值
2.最后在做和運算
map()函數
python內置的一個高階函數,它接收一個函數f和一個list,並且把list的元素以此傳遞給函數f,然后返回一個函數f處理完所有list元素的列表,如下:
注解:
1.l 是一個list,把此list的元素傳入函數f2,求每個元素的平方
2.把最終所有計算的結果合並成一個新的list
reduce()函數
reduce()函數也是python的內置高階函數,reduce()函數接收的的參數和map()類似,一個函數f,一個list,但行為和map()不同,reduce()傳入的參數f必須接受2個參數,
第一次調用是把list的前兩個元素傳遞給f,第二次調用時,就是把前兩個list元素的計算結果當成第一個參數,list的第三個元素當成第二個參數,傳入f進行操作,以此類推,並最終返回結果;
注解:
1,計算a=f(1,2)的值為3
2,計算b=f(a,3)的值為6
3,計算c=f(b,4)的值為10
4,計算d=f(c,5)的值為15
5,計算f(d,10)的值為25
其實就是相當於1+2+3+4+5+10 ,最后的10為默認值,及最終執行一次
filter()函數
filter()函數是python內置的另一個有用的高階函數,filter()函數接收一個函數f和一個list,這個函數f的作用是對每個元素進行判斷,返回true或false,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件的元素組成的list;例
注解:
1.llist元素以此傳入到函數f
2.f判斷每個元素是否符合條件,把符合條件的留下,不符合條件的舍棄
3.把最終符合條件的元素組成一個新的列表
sorted()函數
sorted() 函數對所有可迭代的對象進行排序操作。
sort 與 sorted 區別:
sort 是應用在 list 上的方法,sorted 可以對所有可迭代的對象進行排序操作。
list 的 sort 方法返回的是對已經存在的列表進行操作,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作。
sorted 語法:
sorted(iterable[, cmp[, key[, reverse]]])
參數說明:
- iterable -- 可迭代對象。
- cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
- key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
- reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
返回值
返回重新排序的列表。
以下實例展示了 sorted 的使用方法:
>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a [5, 7, 6, 3, 4, 1, 2]
>>> b [1, 2, 3, 4, 5, 6, 7]
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函數
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
匿名函數
python 使用 lambda 來創建匿名函數。
- lambda只是一個表達式,函數體比def簡單很多。
- lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
- lambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全局命名空間里的參數。
- 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,后者的目的是調用小函數時不占用棧內存從而增加運行效率。
語法
lambda函數的語法只包含一個語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
如下實例:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 可寫函數說明 sum = lambda arg1, arg2: arg1 + arg2; # 調用sum函數 print "相加后的值為 : ", sum( 10, 20 ) print "相加后的值為 : ", sum( 20, 20 )
以上實例輸出結果:
相加后的值為 : 30 相加后的值為 : 40