Python高階函數和匿名函數


高階函數:就是把函數當成參數傳遞的一種函數;例如

注解:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM