Python程序設(shè)計(jì)基礎(chǔ)教程(微課版) 課件 第5章 - Python自定義函數(shù)_第1頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)教程(微課版) 課件 第5章 - Python自定義函數(shù)_第2頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)教程(微課版) 課件 第5章 - Python自定義函數(shù)_第3頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)教程(微課版) 課件 第5章 - Python自定義函數(shù)_第4頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)教程(微課版) 課件 第5章 - Python自定義函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python程序設(shè)計(jì)第5章Python自定義函數(shù)學(xué)習(xí)目標(biāo)識(shí)記函數(shù)/lambda表達(dá)式語(yǔ)法理解函數(shù)要素掌握函數(shù)的使用知識(shí)目標(biāo)能夠根據(jù)需求正確編寫函數(shù)能夠使用map()等高級(jí)函數(shù)簡(jiǎn)化代碼能力目標(biāo)專業(yè)精神與責(zé)任開源文化與版權(quán)意識(shí)情感態(tài)度與價(jià)值觀函數(shù)定義與調(diào)用01020403函數(shù)返回值與參數(shù)變量作用域高階函數(shù)目

錄函數(shù)定義與調(diào)用01020403函數(shù)返回值與參數(shù)變量作用域高階函數(shù)目

錄函數(shù)概述函數(shù)定義函數(shù)調(diào)用函數(shù):封裝了特定任務(wù)實(shí)現(xiàn)的代碼塊內(nèi)置函數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)第三方庫(kù)函數(shù)自定義函數(shù)函數(shù)代碼非調(diào)用不執(zhí)行減少重復(fù)代碼,避免代碼冗余提高代碼的可讀性和可維護(hù)性代碼更加模塊化,便于組織和維護(hù)5.1函數(shù)概述985.2函數(shù)定義與調(diào)用99def函數(shù)名([參數(shù)列表]):#函數(shù)體[return返回值]def:定義函數(shù)的關(guān)鍵字函數(shù)名:遵循標(biāo)識(shí)符的命名規(guī)則([參數(shù)列表]):代表函數(shù)必須從外部得到的數(shù)據(jù),不需要外部數(shù)據(jù)則小括號(hào)內(nèi)留空冒號(hào):表示下一行開始進(jìn)入函數(shù)體函數(shù)體:實(shí)現(xiàn)目標(biāo)功能的語(yǔ)句塊,需要縮進(jìn)return:返回語(yǔ)句,可以帶返回值,也可以不帶函數(shù)模擬切水果機(jī)器(定義部分)5.2函數(shù)定義與調(diào)用100deffruit_cutter(fruit):print(f'開始切{fruit}')pieces=list(fruit)returnpieces示例5-1def函數(shù)名([參數(shù)列表]):#函數(shù)體[return返回值]沒(méi)有返回值的函數(shù)直接調(diào)用有返回值的函數(shù)可將返回值賦值給其他變量5.2函數(shù)定義與調(diào)用100函數(shù)名([實(shí)際參數(shù)])變量=函數(shù)名([實(shí)際參數(shù)])函數(shù)模擬切水果機(jī)器(調(diào)用部分)5.2函數(shù)定義與調(diào)用100deffruit_cutter(fruit):print(f'開始切{fruit}')pieces=list(fruit)returnpiecesfruit_pieces=fruit_cutter('apple')print(fruit_pieces)#['a','p','p','l','e']示例5-1函數(shù)定義與調(diào)用01020403函數(shù)返回值與參數(shù)變量作用域高階函數(shù)目

錄函數(shù)返回值與參數(shù)020403變量作用域高階函數(shù)目

錄函數(shù)定義與調(diào)用01函數(shù)返回值函數(shù)參數(shù)返回值是函數(shù)內(nèi)部需要傳遞到函數(shù)外部的數(shù)據(jù)計(jì)算結(jié)果:面積計(jì)算、利息計(jì)算、三角函數(shù)狀態(tài)信息:數(shù)據(jù)是否保存成功、數(shù)據(jù)是否合法數(shù)據(jù)加工結(jié)果:排序結(jié)果、數(shù)據(jù)檢索結(jié)果返回值使用return語(yǔ)句返回給調(diào)用者Python函數(shù)返回值形式None單一值多個(gè)值5.3函數(shù)的返回值100返回None值沒(méi)有return語(yǔ)句,函數(shù)體執(zhí)行完畢返回時(shí)遇到return語(yǔ)句但return之后沒(méi)有數(shù)據(jù)時(shí)5.3函數(shù)的返回值100defsay_hello(name):

print(f'Hello,{name}!')ret_val=say_hello('張三')print(ret_val)#輸出結(jié)果:None示例5-2返回None值沒(méi)有return語(yǔ)句,函數(shù)體執(zhí)行完畢返回時(shí)遇到return語(yǔ)句但return之后沒(méi)有數(shù)據(jù)時(shí)5.3函數(shù)的返回值101defsay_hello(name):print(f'Hello,{name}!')ret_val=say_hello('張三')print(ret_val)#打印結(jié)果:None示例5-2defsave(name,age):ifnameisNoneorname=='':print(f'名字({name})不合法')returnifageisNoneorage<0:print(f'年齡({age}不合法)')returnprint('保存完畢!')ret_val=save('',18)print(ret_val)#打印結(jié)果:None示例5-3返回單一值(一個(gè)return)5.3函數(shù)的返回值101defsummary(a,b):returna+bret_val=summary(5,10)print(ret_val)示例5-4返回單一值(多個(gè)return)5.3函數(shù)的返回值101defto_level(score):ifscore>=90:return'優(yōu)'elifscore>=80:return'良'elifscore>=70:return'中'elifscore>=60:return'合格'else:return'不合格'示例5-5調(diào)用語(yǔ)句:ret_val=to_level(85)print(ret_val)返回多個(gè)值:多個(gè)數(shù)據(jù)被函數(shù)組合成元組返回5.3函數(shù)的返回值101deftop_1(data_list):max_val=max(data_list)idx=data_list.index(max_val)returnmax_val,idxret_val=top_1([1,19,4,-6,15,7])print(ret_val)#打印結(jié)果:(19,1)ret1,ret2=top_1([1,19,4,-6,15,7])print(ret1,ret2)#打印結(jié)果:191示例5-6參數(shù)傳遞方式?jīng)Q定函數(shù)如何接收外部數(shù)據(jù)位置參數(shù)默認(rèn)參數(shù)關(guān)鍵字參數(shù)變長(zhǎng)參數(shù)不可變實(shí)參和可變實(shí)參5.4參數(shù)傳遞103位置參數(shù):調(diào)用函數(shù)時(shí),必須按照函數(shù)定義中形式參數(shù)的順序,提供實(shí)際參數(shù),不能隨意改變5.4.1位置參數(shù)103defrectangular_perimeter(height,width):return(height+width)*2ret=rectangular_perimeter(3,2)print(ret)打印結(jié)果:10示例5-7默認(rèn)參數(shù):函數(shù)定義中可以為某些形參提供默認(rèn)值,調(diào)用函數(shù)時(shí)如果沒(méi)有為這些參數(shù)提供實(shí)參,函數(shù)將自動(dòng)傳入定義中指定的默認(rèn)值5.4.2默認(rèn)參數(shù)104defsay_hello(name='Python'):print(f'Hello,{name}!')say_hello() #打印結(jié)果:Hello,Python!say_hello('張三') #打印結(jié)果:Hello,張三!示例5-8關(guān)鍵字參數(shù):調(diào)用函數(shù)時(shí)通過(guò)“形參名=值”的語(yǔ)法指定參數(shù)的值,不必依賴定義中形參的位置順序5.4.3關(guān)鍵字參數(shù)104definfo(name,age,career):print(f'{name}今年{age}歲,職業(yè)為{career}')#打印結(jié)果:張三今年28歲,職業(yè)為飛行員info(name='張三',career='飛行員',age=28)示例5-9變長(zhǎng)參數(shù):允許函數(shù)接收不定數(shù)量的實(shí)參*形參名:函數(shù)內(nèi)部將該參數(shù)做元組使用調(diào)用時(shí)依次傳入實(shí)參,逗號(hào)隔開5.4.4變長(zhǎng)參數(shù)104definfo(*person):print(f'{person[0]}今年{person[1]}歲,職業(yè)為{person[2]}')#傳遞的實(shí)參:('張三',28,'飛行員')info('張三',28,'飛行員')示例5-10變長(zhǎng)參數(shù):允許函數(shù)接收不定數(shù)量的實(shí)參**形參名:函數(shù)內(nèi)部將該參數(shù)做字典使用調(diào)用時(shí)使用關(guān)鍵字參數(shù)傳參5.4.4變長(zhǎng)參數(shù)105definfo(**person):forkinperson:print(k,person[k])#傳遞的實(shí)參:{name:'張三',age:28,career:'飛行員'}info(name='張三',age=28,career='飛行員')示例5-11變長(zhǎng)參數(shù)使用要點(diǎn)從函數(shù)定義中的參數(shù)列表看不出具體參數(shù)實(shí)現(xiàn)方和調(diào)用方應(yīng)協(xié)商好參數(shù)的具體定義必要情況下提供相應(yīng)的接口描述5.4.4變長(zhǎng)參數(shù)105不可變實(shí)參:函數(shù)內(nèi)部對(duì)形參的修改不會(huì)影響實(shí)參5.4.5不可變實(shí)參與可變實(shí)參105defchange_value(a,b):a=bname='張三'change_value(name,'李四')print(name)#打印結(jié)果:張三示例5-12可變實(shí)參:函數(shù)內(nèi)部對(duì)形參的修改會(huì)反映到實(shí)參5.4.5不可變實(shí)參與可變實(shí)參105defchange_value(a,b):a[0]=binfo=['張三',28,'飛行員']change_value(info,'李四')print(info)#打印結(jié)果:['李四',28,'飛行員']示例5-13函數(shù)定義與調(diào)用01020403函數(shù)返回值與參數(shù)變量作用域高階函數(shù)目

錄變量作用域0304高階函數(shù)目

錄函數(shù)定義與調(diào)用0102函數(shù)返回值與參數(shù)全局變量局部變量global關(guān)鍵字變量作用域:變量能夠被使用的范圍全局變量局部變量5.5變量作用域108全局變量:定義在源文件中,處于函數(shù)、類定義之外的變量在整個(gè)程序運(yùn)行期間都存在程序的任何位置都可以讀取和修改全局變量5.5.1全局變量108a=10 #定義全局變量ab=5 #定義全局變量bdefsummary(x,y):returnx+yprint(summary(a,b))#將a和b用作實(shí)參b+=1#修改變量b示例5-14局部變量:函數(shù)內(nèi)部定義的變量函數(shù)被調(diào)用時(shí)創(chuàng)建,函數(shù)執(zhí)行期間存在只能在該函數(shù)內(nèi)部使用5.5.2局部變量108defdemo():x=2#定義局部變量x

y=4#定義局部變量yprint(x,y)demo()

#打印結(jié)果:24print(x)

#報(bào)錯(cuò):NameError:name'x'isnotdefined示例5-15對(duì)于一個(gè)變量,當(dāng)函數(shù)內(nèi)部?jī)H讀取它時(shí),認(rèn)為該變量是全局變量5.5.3global關(guān)鍵字109a=10#定義全局變量adefdemo1():b=a+1#僅讀取a的值,在全局域中尋找aprint(a,b)demo1()#打印結(jié)果:1011示例5-16對(duì)于一個(gè)變量,當(dāng)函數(shù)內(nèi)部對(duì)它賦值時(shí),認(rèn)為該變量是局部變量5.5.3global關(guān)鍵字109a=10#定義全局變量adefdemo2():a=20#定義局部變量a,和全局變量a同名,函數(shù)內(nèi)部將覆蓋全局變量ademo2()print(a)#打印結(jié)果:10示例5-17對(duì)于一個(gè)變量,當(dāng)函數(shù)內(nèi)部對(duì)它賦值時(shí),認(rèn)為該變量是局部變量5.5.3global關(guān)鍵字109a=10#定義全局變量adefdemo3():print(a)a=30#a為局部變量,但上一行先使用了ademo3()#報(bào)錯(cuò)示例5-17在函數(shù)內(nèi)部修改全局變量的值,需在函數(shù)內(nèi)部用global先行聲明5.5.3global關(guān)鍵字109a=10#定義全局變量adefdemo4():globala#聲明函數(shù)內(nèi)部使用全局變量aa=20demo4()print(a)#打印結(jié)果:20示例5-18global全局變量名函數(shù)定義與調(diào)用01020403函數(shù)返回值與參數(shù)變量作用域高階函數(shù)目

錄高階函數(shù)04目

錄函數(shù)定義與調(diào)用0102函數(shù)返回值與參數(shù)03變量作用域lambda表達(dá)式map()和filter()閉包高階函數(shù):能夠接受其他函數(shù)作為參數(shù),或者返回一個(gè)函數(shù)作為結(jié)果的函數(shù)5.6高階函數(shù)110lambda表達(dá)式:一種簡(jiǎn)潔的函數(shù)定義方式,定義一個(gè)簡(jiǎn)單的、單表達(dá)式的匿名函數(shù)參數(shù)列表:可以是任意數(shù)量的參數(shù),多個(gè)參數(shù)之間用逗號(hào)隔開表達(dá)式:通常是一個(gè)較為簡(jiǎn)單的單一表達(dá)式,其值即為函數(shù)的返回值5.6.1lambda表達(dá)式lambda參數(shù)列表:表達(dá)式將lambda表達(dá)式定義的匿名函數(shù)存放在變量中,以變量名作為函數(shù)名調(diào)用5.6.1lambda表達(dá)式110f=lambdax,y,z:x+y+zresult=f(1,3,5)print(result)#打印結(jié)果:9示例5-19變量名=lambda參數(shù)列表:表達(dá)式使用lambda表達(dá)式對(duì)字典鍵值對(duì)排序5.6.1lambda表達(dá)式110emotions={0:'anger',-1:'sad',1:'happiness'}result=sorted(emotions.items(),key=lambdax:x[0])print(result)#打印:[(-1,'sad'),(0,'anger'),(1,'happiness')]示例5-20map():接受一個(gè)函數(shù)和N個(gè)(N≥1)可迭代對(duì)象作為參數(shù),函數(shù)應(yīng)用于可迭代對(duì)象的每個(gè)元素,并返回一個(gè)迭代器,其中包含應(yīng)用函數(shù)后的結(jié)果通常將這個(gè)迭代器轉(zhuǎn)換成列表等數(shù)據(jù)結(jié)構(gòu)后再使用5.6.2map()與filter()111map(函數(shù)名,iterable1[,iterable2,...,iterableN]使用map()將列表所有字符串轉(zhuǎn)換為小寫5.6.2map()與filter()111fruits=['Apple','Banana','Cherry']result=map(str.lower,fruits)print(list(result))#打印結(jié)果:['apple','banana','cherry']示例5-21map()處理多個(gè)可迭代對(duì)象5.6.2map()與filter()111defmultiply(x,y):returnx*ylist1=[1,2,3,4,5]list2=[6,7,8,9,10]result=map(multiply,list1,list2)print(list(result))#打印結(jié)果:[6,14,24,36,50]result=map(lambdax,y:x*y,list1,list2)print(list(result))#打印結(jié)果:[6,14,24,36,50]示例5-22filter():用于篩選數(shù)據(jù),它接受一個(gè)函數(shù)和一個(gè)可迭代對(duì)象作為參數(shù),函數(shù)對(duì)可迭代對(duì)象的每個(gè)元素進(jìn)行測(cè)試,并返回一個(gè)迭代器,其中包含測(cè)試結(jié)果為True的元素通常將這個(gè)迭代器轉(zhuǎn)換成列表等數(shù)據(jù)結(jié)構(gòu)后再使用5.6.2map()與filter()111filter(函數(shù)名,可迭代對(duì)象)filter()篩選偶數(shù)5.6.2map()與filter()112defis_e

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論