匿名函數(shù)及高階函數(shù)_第1頁
匿名函數(shù)及高階函數(shù)_第2頁
匿名函數(shù)及高階函數(shù)_第3頁
匿名函數(shù)及高階函數(shù)_第4頁
匿名函數(shù)及高階函數(shù)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《Python開發(fā)技術(shù)應(yīng)用》44匿名函數(shù)及高階函數(shù)什么是匿名函數(shù)使用Python寫一些執(zhí)行腳本時,使用匿名函數(shù)可以省去定義函數(shù)的過程,讓代碼更加精簡。對于一些抽象的,不會別的地方再復(fù)用的函數(shù),有時候給函數(shù)起個名字也挺麻煩,使用匿名函數(shù)不需要考慮命名的問題,并且可以讓代碼更容易理解。匿名函數(shù)使用關(guān)鍵字lambda來定義,語法格式:lambdaargs:expression匿名函數(shù)和add()等價的匿名函數(shù):>>>f1=lambdax,y:x+y假如我們需要一個加法函數(shù):>>>defadd(x,y)...returnx+y匿名函數(shù)的主要意義在于函數(shù)速寫,它也常常在高階函數(shù)中作為參數(shù)來使用。如果不給它分配名稱,那么就需要立即調(diào)用,因為它是匿名的,所以在后續(xù)代碼中無法訪問,就不能再調(diào)用。>>>(lambdax,y:x+y)(3,4)7匿名函數(shù)高階函數(shù)高階函數(shù)的定義:函數(shù)的參數(shù)(同時也是函數(shù)要處理的對象)是其他函數(shù)。常用的高階函數(shù)包括map()、reduce()、filter()、sorted()等。map()函數(shù)原型:

map(function,iterable,...)function:一個函數(shù)的元數(shù)據(jù)引用iterable:一個或多個序列map()會根據(jù)提供的函數(shù)對指定序列做映射,即以參數(shù)序列中的每一個元素調(diào)用function函數(shù),返回一個map對象,可以轉(zhuǎn)換成列表,也可以直接迭代訪問。map()函數(shù)假設(shè)我們有一個函數(shù)f(x)=x2,要把這個函數(shù)作用在一個列表中的各個元素上,用高階函數(shù)map()來實現(xiàn):map(f(x),list)123456789[]list:149162536496481[]return:

f(x)=x2

deffoo(x):returnx*xm1=map(foo,[1,2,3,4,5,6,7,8,9])print(m1)print(list(m1))執(zhí)行結(jié)果:<mapobjectat0x000002DD762DB8C8>[1,4,9,16,25,36,49,64,81]map()函數(shù)如果map()函數(shù)的處理函數(shù)需要多個參數(shù),那么對應(yīng)的數(shù)據(jù)序列也要有多個,例如計算矩形面積需要長和寬相乘,那么就需要一個序列提供長、另一個序列提供寬。>>>list(map(lambdax,y:x*y,[5,12,8],[3,5,6]))[15,60,48]map()函數(shù)中的處理函數(shù)可以是匿名函數(shù),因此這個計算二次方的例子可以寫成以下形式:>>>list(map(lambdax:x*x,[1,2,3,4,5,6,7,8,9]))[1,4,9,16,25,36,49,64,81]map()函數(shù)reduce()也是一個常用的高階函數(shù),由functools模塊提供,函數(shù)原型:reduce(func,iterable[,initializer])

func是用于處理的函數(shù),該函數(shù)要求兩個參數(shù)和一個返回值;iterable為可迭代對象;initializer是可選的,為初始參數(shù);返回值是函數(shù)計算結(jié)果。函數(shù)將一個數(shù)據(jù)集合(列表,元組等)中的所有數(shù)據(jù)進(jìn)行下列操作:用傳給reduce中的函數(shù)func(有兩個參數(shù))先對集合中的第1、2個元素進(jìn)行操作,得到的結(jié)果再與第三個數(shù)據(jù)用func函數(shù)運(yùn)算,以此類推,最后得到一個結(jié)果??梢哉J(rèn)為:reduce(f,[x1,x2,x3,x4])等價于f(f(f(x1,x2),x3),x4)reduce()函數(shù)functoools.reduce(f(x),list)123456[]list:return

f(x,y)=x×y2624120720>>>importfunctools>>>functools.reduce(lambdax,y:x*y,range(1,7))720reduce()函數(shù)filter()函數(shù)主要用于過濾序列,它有以下特性:filter()接收一個函數(shù)和一個序列,函數(shù)必須是判斷型函數(shù),返回True或False;filter()把傳入的函數(shù)依次作用于序列中的每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。函數(shù)原型:filter(function,iterable)function:判斷函數(shù)iterable:為可迭代對象返回值是一個filter對象,可以轉(zhuǎn)換為列表,也可以用for循環(huán)訪問。filter()函數(shù)下面舉個例子,在一個list中,刪掉偶數(shù),只保留奇數(shù):>>>defis_odd(n):...returnn%2==1>>>list(filter(is_odd,[1,2,4,5,6,9,10,15]))[1,5,9,15]再舉例把一個序列中的空字符串刪掉:>>>defnot_empty(s):...returnsands.strip()>>>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論