def add(x,y,f): return f(x) + f(y) op = add(1,1,abs) #這裏把python內置函數abs做爲參數傳遞給add print op 結果:2 python裏的高階函數有 filter、map、reduce、sorted、匿名函數lambda等
匿名函數:python
python使用lambda來建立匿名函數express
- lambda 只是一個表達式,函數體比 def 簡單不少。
- lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
- lambda 函數擁有本身的命名空間,且不能訪問本身參數列表以外或全局命名空間裏的參數。
- 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增長運行效率。
語法:lambda 函數的語法只包含一個語句,以下:
lambda [arg1 [,arg2,.....argn]]:expression #lambda 參數列表:return [表達式] 變量 # 因爲lambda返回的是函數對象(構建的是一個函數對象),因此須要定義一個變量去接收
實例1ide
sum = lambda arg1, arg2: arg1 + arg2; # 調用sum函數 print ("相加後的值爲 : ", sum( 10, 20 )) # 相加後的值爲 : 30 print ("相加後的值爲 : ", sum( 20, 20 )) # 相加後的值爲 : 40
實例2函數
#對字典排序 infors = [{"name":"wang","age":18},{"name":"li","age":20},{"name":"qian","age":30}] infors.sort(key=lambda x:x['age']) #根據值對字典排序 print(infors)
實例3code
def test(a,b,func): result = func(a,b) return result num = test(11,22,lambda x,y:x+y) print(num)
filter函數對象
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。該接收兩個參數,第一個爲函數,第二個爲序列,序列的每一個元素做爲參數傳遞給函數進行判,而後返回 True 或 False,最後將返回 True 的元素放到新列表中。排序
- 語法:filter(function, iterable)
- 參數:function---- 判斷函數,iterable -- 可迭代對象。
- 返回值:返回列表。
實例內存
def is_odd(n): return n % 2 == 1 alist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(alist)
map函數it
接收一個函數 f 和一個或多個序列list,並經過把函數 f 依次做用在 序列list 的每一個元素上,獲得一個新的 list 並返回。io
- 語法:map(function, iterable, ...)
- 參數:function -- 函數,iterable -- 一個或多個序列
- 返回值:Python 2.x 返回列表。Python 3.x 返回迭代器。
實例
>>>def square(x) : # 計算平方數 ... return x ** 2 ... >>> map(square, [1,2,3,4,5]) # 計算列表各個元素的平方 [1, 4, 9, 16, 25] >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函數 [1, 4, 9, 16, 25] # 提供了兩個列表,對相同位置的列表數據進行相加 >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) [3, 7, 11, 15, 19]
reduce函數
reduce()函數接收的參數和 map()相似,可是行爲不一樣。reduce() 函數會對參數序列中元素進行累積。reduce()傳入的函數 f 必須接收兩個參數,用傳給 reduce 中的函數 f(有兩個參數)先對集合中的第 一、2 個元素進行操做,獲得的結果再與第三個數據用 f 函數運算,最後獲得一個結果。
- 語法:reduce(function, iterable[, initializer])
- 參數:function -- 函數,有兩個參數。iterable -- 可迭代對象。initializer -- 可選,初始參數
實例
>>>def add(x, y) : # 兩數相加 ... return x + y ... >>> reduce(add, [1,2,3,4,5]) # 計算列表和:1+2+3+4+5 15 >>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函數 15 >>> def f(a,b): ... return a+b ... >>> print reduce(f,[1,2,3,4],10) #1+2+3+4+10.這裏的第三個參數是作爲初始值的。 20 #注意:reduce在3.0裏已經已經由一個內置方法移到標準庫裏了,3.0裏調用reduce必須import functools,3.0裏使用方法以下 >>>import functools >>>res = functools.reduce(lambda x, y: x+y, [1,2,3,4,5]) >>>print res
sorted函數
sort 與 sorted 區別:
sort 是應用在 list 上的方法,sorted 能夠對全部可迭代的對象進行排序操做。
list 的 sort 方法返回的是對已經存在的列表進行操做,無返回值,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操做。
- 語法:sorted(iterable[, cmp[, key[, reverse]]])
- 參數:
iterable -- 可迭代對象。
cmp -- 比較的函數,這個具備兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵照的規則爲,大於則返回1,小於則返回-1,等於則返回0。
key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。- 返回值:返回從新排序的列表。
實例
>>>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)] >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] >>> sorted(students, key=lambda s: s[2]) # 按年齡排序 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] >>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序 [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] >>>