版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
精品文檔1.map()函數(shù)map()是Python內(nèi)置的高階函數(shù),它接收一個函數(shù)f和一個list,并通過把函數(shù)f依次作用在list的每個元素上,得到一個新的list并返回。1.map()函數(shù)例如,對于list[1,2,3,4,5,6,7,8,9]如果希望把list的每個元素都作平方,就可以用map()函數(shù):因此,我們只需要傳入函數(shù)f(x)=x*x,就可以利用map()函數(shù)完成這個計算:deff(x):deff(x):returnx*xprintmap(f,[1,2,3,4,5,6,7,8,9])輸出結(jié)果:[1,4,9,10,25,36,49,64,81][1,4,9,10,25,36,49,64,81]可以用列表替代注意:map()函數(shù)不改變原有的list,而是返回一個新的list。精品文檔精品文檔利用map()函數(shù),可以把一個list轉(zhuǎn)換為另一個list,只需要傳入轉(zhuǎn)換函數(shù)。假設(shè)用戶輸入的英文名字不規(guī)范,沒有按照首字母大寫,后續(xù)字母小寫的規(guī)則,請利用map()假設(shè)用戶輸入的英文名字不規(guī)范,沒有按照首字母大寫,后續(xù)字母小寫的規(guī)則,請利用map()函數(shù),把一個list(包含若干不規(guī)范的英文名字)變成一個包含規(guī)范英文名字的list:輸入:['adam','LISA','barT']輸出:['Adam','Lisa','Bart']format_name(s)函數(shù)接收一個字符串,并且要返回格式化后的字符串,利用map()函數(shù),就可以輸format_name(s)函數(shù)接收一個字符串,并且要返回格式化后的字符串,利用map()函數(shù),就可以輸出新的list。參考代碼:defformat_name(s):returns[0].upper()+s[1:].lower()printmap(format_name,['adam','LISA','barT'])reduce()函數(shù)reduce()函數(shù)也是Python內(nèi)置的一個高階函數(shù)。reduce()函數(shù)接收的參數(shù)和map()類似,一個函reduce()函數(shù)也是Python內(nèi)置的一個高階函數(shù)。reduce()函數(shù)接收的參數(shù)和map()類似,一個函數(shù)f,一個list,但行為和map()不同,reduce()傳入的函數(shù)f必須接收兩個參數(shù),reduce()對list的每個元素反復(fù)調(diào)用函數(shù)f,并返回最終結(jié)果值。例如,編寫一個f函數(shù),接收x和y,返回x和y的和:deff(x,y):returnx+y調(diào)用reduce(f,[1,3,5,7,9])時,reduce函數(shù)將做如下計算:精品文檔精品文檔先計算頭兩個元素:f(1,3),結(jié)果為4;3先計算頭兩個元素:f(1,3),結(jié)果為4;3f(4,59;4f(9,716;5f(16,925。上述計算實際上是對tn內(nèi)置了求和函數(shù)求和也很簡單。reduce()還可以接收第3個可選參數(shù),作為計算的初始值。如果把初始值設(shè)為100,計算:reduce(f,[1,3,5,7,9],100)結(jié)果將變?yōu)?25,因為第一輪計算是:計算初始值和第一個元素:f(100,1),結(jié)果為101。Python內(nèi)置了求和函數(shù)sum(),但沒有求積的函數(shù),請利用recude()來求積:輸入:[2,4,5,7,12]Python內(nèi)置了求和函數(shù)sum(),但沒有求積的函數(shù),請利用recude()來求積:輸入:[2,4,5,7,12]輸出:2*4*5*7*12的結(jié)果reduce()接收的函數(shù)f需要兩個參數(shù),并返回一個結(jié)果,以便繼續(xù)進(jìn)行下一輪計算。參考代碼:defprod(x,y):returnx*yprintreduce(prod,[2,4,5,7,12])filter()函數(shù)精品文檔精品文檔filter()函數(shù)是Python內(nèi)置的另一個有用的高階函數(shù),filter()函數(shù)接收一個函數(shù)f和一個list,這個函數(shù)f的作用是對每個元素進(jìn)行判斷,返回True或False,filter()根據(jù)判斷結(jié)果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。list[1filter()函數(shù)是Python內(nèi)置的另一個有用的高階函數(shù),filter()函數(shù)接收一個函數(shù)f和一個list,這個函數(shù)f的作用是對每個元素進(jìn)行判斷,返回True或False,filter()根據(jù)判斷結(jié)果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。list[1,4,6,7,9,12,defis_odd(x):returnx%2==1然后,利用filter()過濾掉偶數(shù):filter(is_odd,[1,4,6,7,9,12,17])結(jié)果:[1,7,9,17]利用filter(),可以完成很多有用的功能,例如,刪除None或者空字符串:defis_not_empty(s):returnsandlen(s.strip())>0filter(is_not_empty,['test',None,'','str','','END'])結(jié)果:['test','str','END']注意:s.strip(rm)刪除s字符串中開頭、結(jié)尾處的rm序列的字符。當(dāng)rm為空時,默認(rèn)刪除空白符(包括'\n','\r','\t',''),如下:a='123'a.strip()結(jié)果:'123'a='\t\t123\r\n'a.strip()結(jié)果:'123'請利用filter()過濾出1~100中平方根是整數(shù)的數(shù),即結(jié)果應(yīng)該是:精品文檔精品文檔[1,4,9,16,25,36,49,64,81,100]filter()[1,4,9,16,25,36,49,64,81,100]filter()接收的函數(shù)必須判斷出一個數(shù)的平方根是否是整數(shù),而math.sqrt()返回結(jié)果是浮點數(shù)。參考代碼:importmathdefis_sqr(x):r=int(math.sqrt(x))returnr*r==xprintfilter(is_sqr,range(1,101))sorted()Python內(nèi)置的sorted()函數(shù)可對list進(jìn)行排序:>>>sorted([36,5,12,9,21])[5,9,12,21,36]但Python內(nèi)置的sorted()函數(shù)可對list進(jìn)行排序:>>>sorted([36,5,12,9,21])[5,9,12,21,36]但sorted()也是一個高階函數(shù),它可以接收一個比較函數(shù)來實現(xiàn)自定義排序,比較函數(shù)的定義是,傳入兩個待比較的元素x,y,如果x應(yīng)該排在y的前面,返回-1,如果x應(yīng)該排在y的后面,返回1。如果x和y相等,返回0。因此,如果我們要實現(xiàn)倒序排序,只需要編寫一個reversed_cmp函數(shù):defreversed_cmp(x,ifx>y:returnifx<y:return1return0這樣,調(diào)用sorted()并傳入reversed_cmp就可以實現(xiàn)倒序排序:>>>sorted([36,5,12,9,21],reversed_cmp)[36,21,12,9,5]精品文檔精品文檔sorted()也可以對字符串進(jìn)行排序,字符串默認(rèn)按照ASCII大小來比較:>>>sorted(['bob','about','Zoo','Credit'])['Credit','Zoo','about','bob']'Zoo'排在'about'之前是因為'Z'的ASCII碼比'a'小。sorted()也可以對字符串進(jìn)行排序,字符串默認(rèn)按照ASCII大小來比較:>>>sorted(['bob','about','Zoo','Credit'])['Credit','Zoo','about','bob']'Zoo'排在'about'之前是因為'Z'的ASCII碼比'a'小。對于比較函數(shù)cmp_ignore_case(s1,s2),要忽略大小寫比較,就是先把兩個字符串都變成大寫(或者都變成小寫),再比較。參考代碼:defcmp_ignore_case(s1,s2):u1=s1.upper()者都變成小寫),再比較。參考代碼:defcmp_ignore_case(s1,s2):u1=s1.upper()u2=s2.upper()ifu1<u2:returnifu1>u2:return1return0printsorted(['bob','about','Zoo','Credit'],cmp_ignore_case)返回函數(shù)PythonPythonint、str、list、dict等數(shù)據(jù)類型,還可以返回函數(shù)!f()g,可以這樣寫:8.deff():9.10.11.12.13.14.print'callf()...'#定義函數(shù)g:defg():print'callg()...'#返回函數(shù)g:returng15.仔細(xì)觀察上面的函數(shù)定義,我們在函數(shù)f內(nèi)部又定義了一個函數(shù)g。由于函數(shù)g也是一個對象,函數(shù)名g就是指向函數(shù)g的變量,所以,最外層函數(shù)f可以返回變量g,也就是函數(shù)g本身。精品文檔精品文檔16.調(diào)用函數(shù)f,我們會得到f返回的一個函數(shù):17.>>>x=f()18.callf()...16.調(diào)用函數(shù)f,我們會得到f返回的一個函數(shù):17.>>>x=f()18.callf()...f()x xf()返回的函數(shù):<functiongat0x1037bf320>21.>>>x()x指向函數(shù),因此可以調(diào)用22.callg()...x()g()函數(shù)定義的代碼23.請注意區(qū)分返回函數(shù)和返回值:24.defmyabs():25.returnabs返回函數(shù)26.defmyabs2(x):27.returnabs(x)返回函數(shù)調(diào)用的結(jié)果,返回值是一個數(shù)值28.返回函數(shù)可以把一些計算延遲執(zhí)行。例如,如果定義一個普通的求和函數(shù):29.defcalc_sum(lst):30.returnsum(lst)31.調(diào)用calc_sum()函數(shù)時,將立刻計算并得到結(jié)果:32.>>>calc_sum([1,2,3,4])33.1034.但是,如果返回一個函數(shù),就可以“延遲計算”:35.defcalc_sum(lst):36.37.38.deflazy_sum():returnsum(lst)returnlazy_sum39.#調(diào)用calc_sum()并沒有計算出結(jié)果,而是返回函數(shù):40.>>>f=calc_sum([1,2,3,4])41.>>>f42.<functionlazy_sumat0x1037bfaa0>43.#對返回的函數(shù)進(jìn)行調(diào)用時,才計算出結(jié)果:44.>>>f()45.10精品文檔精品文檔46.46.由于可以返回函數(shù),我們在后續(xù)代碼里就可以決定到底要不要調(diào)用該函數(shù)。defcalc_prod(lst):deflazy_prod():deff(x,y):returnx*yreturnreduce(f,lst,1)returnlazy_prodf=calc_prod([1,2,3,4])printf()在函數(shù)內(nèi)部定義的函數(shù)和外部定義的函數(shù)是一樣的,只是他們無法被外部訪問:defg():print'g()...'deff():print'f()...'returng將g在函數(shù)內(nèi)部定義的函數(shù)和外部定義的函數(shù)是一樣的,只是他們無法被外部訪問:defg():print'g()...'deff():print'f()...'returng將g的定義移入函數(shù)f內(nèi)部,防止其他代碼調(diào)用g:deff():print'f()...'defg():print'g()...'returng但是,考察上一小節(jié)定義的calc_sum函數(shù):defcalc_sum(lst):deflazy_sum():returnsum(lst)returnlazy_sum注意:發(fā)現(xiàn)沒法把lazy_sum移到calc_sum的外部,因為它引用了calc_sum的參數(shù)lst。像這種內(nèi)層函數(shù)引用了外層函數(shù)的變量(參數(shù)也算變量閉包(Closure)。精品文檔精品文檔閉包的特點的局部變量在函數(shù)返回后不能變。舉例如下:3閉包的特點的局部變量在函數(shù)返回后不能變。舉例如下:31x1,2x2,3x3:defcount():fs=[]foriinrange(1,4):deff():returni*ifs.append(f)returnfsf1,f2,f3=count()f3()請自己動手驗證count()33個函數(shù)所引用的變量i3f1、f2、f3i*if1被調(diào)用時:>>>f1()9f1i*ii3因此,返回函數(shù)不要引用任何循環(huán)變量,或者后續(xù)會發(fā)生變化的變量。count()1x12x23x3的函數(shù)。deff(j):defg():returnj*jreturngg,gjcountfi。參考代碼:defcount():fs=[]foriinrange(1,4):deff(j):defg():returnj*jreturng精品文檔精品文檔r=f(i)fs.append(r)r=f(i)fs.append(r)returnfsf1,f2,f3=count()printf1(),f2(),f3()匿名函數(shù)便。Python中,對匿名函數(shù)提供了有限支持。還是以map()函數(shù)為例,計算便。Python中,對匿名函數(shù)提供了有限支持。還是以map()函數(shù)為例,計算f(x)的函數(shù)外,還可以直接傳入匿名函數(shù):>>>map(lambdax:x*x,[1,2,3,4
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新型公寓托管出租合同范本3篇
- 二零二五年度智能廣告牌匾技術(shù)研發(fā)與應(yīng)用合同3篇
- 2025年度校園體育設(shè)施租賃管理服務(wù)合同3篇
- 二零二五年度服務(wù)貿(mào)易統(tǒng)計與分析合同3篇
- 二零二五年份白酒行業(yè)創(chuàng)新技術(shù)研發(fā)與應(yīng)用合同3篇
- 二零二五年度化妝品店會員折扣合同3篇
- 英語ai課程設(shè)計
- 通源課程設(shè)計哪個簡單
- 二零二五年度智慧教育項目技術(shù)服務(wù)費合同模板3篇
- 二零二五年度歷史文化名城保護(hù)建設(shè)項目合同補充條款3篇
- 2023年機房搬遷(合同) 機房搬遷服務(wù)(合同)
- 中華全國律師協(xié)會律師辦理物業(yè)管理法律業(yè)務(wù)操作指引
- 配水管網(wǎng)工程主要項目施工方法及技術(shù)措施
- 地基驗槽記錄
- 軟件無線電原理與應(yīng)用第3版 課件 【ch01】概述
- 手術(shù)區(qū)皮膚消毒及鋪單法課件
- 血液科侵襲性真菌的治療
- 重點??平ㄔO(shè)實施方案(四篇)
- 工程合同違約協(xié)議書范本
- 排列 教學(xué)PPT課件 高中數(shù)學(xué)
- 公益性崗位開發(fā)申請審批表
評論
0/150
提交評論