Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目5 函數(shù)的高級(jí)應(yīng)用_第1頁
Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目5 函數(shù)的高級(jí)應(yīng)用_第2頁
Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目5 函數(shù)的高級(jí)應(yīng)用_第3頁
Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目5 函數(shù)的高級(jí)應(yīng)用_第4頁
Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目5 函數(shù)的高級(jí)應(yīng)用_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

筐魚梧領(lǐng)鳳峽匪跑腳凡輔乒蹤勿久褂舟嬰襲剪肚爹倫甄嘯鐐娟附卉態(tài)再罵廣東農(nóng)工商職業(yè)技術(shù)學(xué)院PPT模板-精美原創(chuàng)畢業(yè)論文答辯廣東農(nóng)工商職業(yè)技術(shù)學(xué)院PPT模板-精美原創(chuàng)畢業(yè)論文答辯項(xiàng)目5函數(shù)的高級(jí)應(yīng)用目錄|CONTENT1項(xiàng)目介紹2項(xiàng)目目標(biāo)3項(xiàng)目準(zhǔn)備4項(xiàng)目實(shí)施項(xiàng)目介紹項(xiàng)目背景本項(xiàng)目提供了Python函數(shù)相關(guān)的一些高級(jí)概念和使用方法,能夠幫助大家完成更復(fù)雜的任務(wù)。項(xiàng)目介紹項(xiàng)目規(guī)劃01熟悉變量作用域、函數(shù)嵌套定義、lambda函數(shù)、閉包、裝飾器等概念和設(shè)計(jì)方法02熟悉遞歸等程序設(shè)計(jì)方法03能綜合運(yùn)用Python相關(guān)知識(shí)點(diǎn)解決典型程序設(shè)計(jì)問題目錄|CONTENT1項(xiàng)目介紹2項(xiàng)目目標(biāo)3項(xiàng)目準(zhǔn)備4項(xiàng)目實(shí)施項(xiàng)目目標(biāo)知識(shí)目標(biāo)1掌握Python函數(shù)相關(guān)的高級(jí)概念2熟悉遞歸的設(shè)計(jì)思想3熟悉經(jīng)典問題的編程方法項(xiàng)目目標(biāo)能力目標(biāo)1了解Python函數(shù)相關(guān)高級(jí)方法的使用2了解使用遞歸解決問題的方法3掌握常用程序設(shè)計(jì)思想目錄|CONTENT1項(xiàng)目介紹2項(xiàng)目目標(biāo)3項(xiàng)目準(zhǔn)備4項(xiàng)目實(shí)施項(xiàng)目準(zhǔn)備1.變量的作用域變量的作用域是指一個(gè)變量能夠作用的范圍,也就是在多大范圍內(nèi)能夠被解釋器識(shí)別。根據(jù)變量的作用域,變量可分為全局變量和局部變量。聲明在函數(shù)外部的變量,被稱為全局變量,作用范圍是所在程序文件內(nèi)從定義開始至程序結(jié)束,包括變量定義后所調(diào)用的函數(shù)內(nèi)部。項(xiàng)目準(zhǔn)備2.函數(shù)的嵌套定義和nonlocal關(guān)鍵字Python函數(shù)的定義可以嵌套。并可以通過nonlocal關(guān)鍵字,可以使內(nèi)層的函數(shù)值接使用外層函數(shù)中定義的變量。defouter():x=10#x為外部函數(shù)的局部變量definner():#定義內(nèi)部函數(shù)x=20#x為內(nèi)部函數(shù)局部變量 print('inner函數(shù)中的x值為:',x)inner()#調(diào)用inner函數(shù)print('outer函數(shù)中的x值為:',x)outer()#調(diào)用outer函數(shù)defouter():x=10#x為外部函數(shù)的局部變量definner():#定義內(nèi)部函數(shù)nonlocalx#nonlocal聲明 x=20#將x賦為20 print('inner函數(shù)中的x值為:',x) inner()#調(diào)用inner函數(shù) print('outer函數(shù)中的x值為:',x)outer()#調(diào)用outer函數(shù)項(xiàng)目準(zhǔn)備3.lambda函數(shù)lambda函數(shù)是一個(gè)匿名函數(shù),有時(shí)也被稱為lambda表達(dá)式,比def格式的函數(shù)定義簡(jiǎn)單很多。lambda函數(shù)可以接收任意多個(gè)參數(shù),但只返回一個(gè)表達(dá)式的值。lambda中不能包含多個(gè)表達(dá)式。lambda定義形式如下:lambda[參數(shù)1[,參數(shù)2,...,參數(shù)n]]:表達(dá)式項(xiàng)目準(zhǔn)備4.閉包如果內(nèi)層函數(shù)使用了外層函數(shù)中定義的局部變量,并且外層函數(shù)的返回值是內(nèi)層函數(shù)的引用,就構(gòu)成了閉包。定義在外層函數(shù)中但由內(nèi)層函數(shù)使用的變量被稱為自由變量。defouter(x):#定義函數(shù)outery=10#定義局部變量y并賦為10

definner(z):#在outer函數(shù)中定義嵌套函數(shù)innernonlocalx,y#nonlocal聲明

returnx+y+z#返回x+y+z的結(jié)果

returninner#返回嵌套函數(shù)inner的引用f=outer(5)#將返回的inner函數(shù)賦給fprint('f(20)的值為:',f(20))#print()函數(shù)輸出的值為35項(xiàng)目準(zhǔn)備5.裝飾器裝飾器實(shí)際上就是閉包。利用裝飾器,可以在不修改已有函數(shù)的情況下向已有函數(shù)中注入代碼,使其具備新的功能。在裝飾器外層函數(shù)的形參列表中只有一個(gè)形參func,接收要裝飾的函數(shù),在內(nèi)層函數(shù)中直接調(diào)用func即表示執(zhí)行所裝飾的函數(shù)中的代碼。將裝飾器內(nèi)層函數(shù)的形參列表寫為“*args,**kwargs”,表示要裝飾的函數(shù)可以具有任意形式的形參列表;對(duì)應(yīng)地,調(diào)用要裝飾的函數(shù)時(shí)也要將實(shí)參列表寫為“*args,**kwargs”。在要裝飾的函數(shù)前面寫上“@裝飾器名”,即可將裝飾器中的代碼注入到該函數(shù)中。項(xiàng)目準(zhǔn)備6.遞歸函數(shù)內(nèi)部可以調(diào)用其他函數(shù)。如果一個(gè)函數(shù)在內(nèi)部直接或間接地調(diào)用自己本身,這是一種遞歸的方法。遞歸是一種非常實(shí)用的程序設(shè)計(jì)技術(shù)。許多問題具有遞歸的特性,在某些情況下,用其他方法很難解決的問題,利用遞歸可以輕松解決。目錄|CONTENT1項(xiàng)目介紹2項(xiàng)目目標(biāo)3項(xiàng)目準(zhǔn)備4項(xiàng)目實(shí)施項(xiàng)目實(shí)施任務(wù)5.1將輸入升序輸出在Python中,如果想實(shí)現(xiàn)可重復(fù)使用,并且目的特定的功能,可以通過函數(shù)來實(shí)現(xiàn)。函數(shù)是組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。Python中既包括內(nèi)置函數(shù),也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。項(xiàng)目實(shí)施任務(wù)5.1將輸入升序輸出建立“將輸入升序輸出.py”文件,用于編寫Python實(shí)驗(yàn)程序編寫任務(wù)代碼。#定義一個(gè)函數(shù),其內(nèi)部實(shí)現(xiàn)為通過sorted函數(shù)對(duì)輸入?yún)?shù)進(jìn)行升序排序,并打印defsortAndPrint(x,y,z):print(sorted((x,y,z)))

#編寫程序的主入口,調(diào)用sortAndPrint函數(shù)實(shí)現(xiàn)排序及打印功能if__name__=='__main__':sortAndPrint(5,10,3)項(xiàng)目實(shí)施任務(wù)5.1將輸入升序輸出執(zhí)行程序①鼠標(biāo)右鍵單擊右側(cè)編輯窗口,在菜單中選擇“Run‘python主程序所在文件名’”一項(xiàng)執(zhí)行編寫好的Python程序,本次實(shí)驗(yàn)文件名為“將輸入升序輸出”

②在IDE下方控制臺(tái)查看輸出結(jié)果項(xiàng)目實(shí)施任務(wù)5.2斐波那契數(shù)列斐波那契數(shù)列(Fibonaccisequence),又稱黃金分割數(shù)列,因數(shù)學(xué)家萊昂納多·斐波那契(LeonardoFibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數(shù)列”,指的是這樣一個(gè)數(shù)列:1、1、2、3、5、8、13、21、34、……在數(shù)學(xué)上,斐波那契數(shù)列以如下被以遞推的方法定義:F(0)=0,F(xiàn)(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在現(xiàn)代物理、準(zhǔn)晶體結(jié)構(gòu)、化學(xué)等領(lǐng)域,斐波納契數(shù)列都有直接的應(yīng)用。項(xiàng)目實(shí)施任務(wù)5.2斐波那契數(shù)列建立“斐波那契數(shù)列.py”文件,用于編寫Python實(shí)驗(yàn)程序編寫任務(wù)代碼。#定義一個(gè)函數(shù),該函數(shù)接收一個(gè)參數(shù)n,用于計(jì)算斐波那契數(shù)列項(xiàng)。當(dāng)n小于等于0時(shí),返回的數(shù)列項(xiàng)值為0defFibonacci_Recursion_tool(n):ifn<=0:return0elifn==1:#實(shí)現(xiàn)當(dāng)n等于1時(shí),返回的數(shù)列項(xiàng)值為1return1else:#實(shí)現(xiàn)當(dāng)n非0非1時(shí),返回的數(shù)列項(xiàng)值為f(n-1)+f(n-2)returnFibonacci_Recursion_tool(n-1)+Fibonacci_Recursion_tool(n-2)

#定義一個(gè)函數(shù),該函數(shù)接收一個(gè)參數(shù)n,用于計(jì)算1-n之間的斐波那契數(shù)列。該函數(shù)的實(shí)現(xiàn)為,遍歷1-n之間的數(shù),并依次調(diào)用Fibonacci_Recursion_tool函數(shù)計(jì)算數(shù)列項(xiàng),并將計(jì)算的結(jié)果保存至一個(gè)列表中defFibonacci_Recursion(n):result_list=[]foriinrange(1,n+1):result_list.append(Fibonacci_Recursion_tool(i))returnresult_list

#編寫程序入口,調(diào)用Fibonacci_Recursion函數(shù),并傳入100作為實(shí)參,計(jì)算10個(gè)斐波那契數(shù)列項(xiàng),并打印if__name__=='__main__':result=Fibonacci_Recursion(10)print(result)項(xiàng)目實(shí)施任務(wù)5.2斐波那契數(shù)列執(zhí)行程序①鼠標(biāo)右鍵單擊右側(cè)編輯窗口,在菜單中選擇“Run‘python主程序所在文件名’”一項(xiàng)執(zhí)行編寫好的Python程序,本次實(shí)驗(yàn)文件名為“將輸入升序輸出”②在IDE下方控制臺(tái)查看輸出結(jié)果項(xiàng)目實(shí)施任務(wù)5.3階乘之和評(píng)價(jià)與考核一個(gè)正整數(shù)的階乘(factorial)是所有小于及等于該數(shù)的正整數(shù)的積,并且0的階乘為1。自然數(shù)n的階乘寫作n!。1808年,基斯頓·卡曼引進(jìn)這個(gè)表示法。亦即n!=1×2×3×...×(n-1)×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。本任務(wù)求解1到20的正整數(shù)的各自階乘并求和。項(xiàng)目實(shí)施任務(wù)5.3階乘之和評(píng)價(jià)與考核建立“階乘之和.py”文件,用于編寫Python實(shí)驗(yàn)程序編寫任務(wù)代碼。#引入reduce函數(shù)用于之后的聚合計(jì)算fromfunctoolsimportreduce#定義函數(shù)factorialA,該函數(shù)接收一個(gè)參數(shù)n,內(nèi)部通過遞歸的方式計(jì)算n的階乘并返回deffactorialA(n):ifn==1:return1else:returnn*factorialA(n-1)#定義函數(shù)factorialB,該函數(shù)接收一個(gè)參數(shù)n,內(nèi)部通過lambda表達(dá)式以及聚合函數(shù)計(jì)算n的階乘并返回deffactorialB(n):returnreduce(lambdax,y:x*y,range(1,n+1))#編寫程序主入口,計(jì)算1-20的階乘之和,并打印if__name__=='__main__':sum=0;foriinrange(1,21):sum+=factorialA(i)print(sum)項(xiàng)目實(shí)施任務(wù)5.3階乘之和評(píng)價(jià)與考核執(zhí)行程序①鼠標(biāo)右鍵單擊右側(cè)編輯窗口,在菜單中選擇“Run‘python主程序所在文件名’”一項(xiàng)執(zhí)行編寫好的Python程序,本次實(shí)驗(yàn)文件名為“階乘之和”②在IDE下方控制臺(tái)查看輸出結(jié)果項(xiàng)目實(shí)施任務(wù)5.4計(jì)算圓的面積圓的面積公式我們都比較熟悉:,其中,π為圓周率,是一個(gè)常數(shù);r為圓的半徑。在實(shí)際的程序中,除了要通過程序正確表達(dá)計(jì)算公式,還要對(duì)公式中各輸入中的正確性進(jìn)行判斷,例如:r是圓的半徑,應(yīng)該是一個(gè)整數(shù)或者浮點(diǎn)數(shù),如果用戶輸入了一個(gè)字符串,則是非法字符,無法進(jìn)行計(jì)算,需要用戶重新輸入。項(xiàng)目實(shí)施任務(wù)5.4計(jì)算圓的面積建立“計(jì)算圓的面積.py”文件,用于編寫Python實(shí)驗(yàn)程序編寫任務(wù)代碼。importmath#引入math包,用于獲取pi的值

#定義一個(gè)函數(shù)用于校驗(yàn)被修飾函數(shù)的參數(shù)類型,其接收一個(gè)func參數(shù),即為被修飾的函數(shù)defvalidate(func):defvalidate(*arg,**kw):iftype(eval(str(arg[0])))==intortype(eval(str(arg[0])))==float:arg=(float(arg[0]),)returnfunc(*arg,**kw)else:print('請(qǐng)傳入一個(gè)數(shù)字')returnvalidate#定義被修飾的函數(shù),該函數(shù)接收一個(gè)參數(shù)r,表示圓的半徑,其功能為計(jì)算圓的面積。在函數(shù)名上方添加@validate使用修飾器校驗(yàn)參數(shù)類型@validatedefarea(r):returnr*r*math.piif__name__=='__main__':print(area(5.4))項(xiàng)目實(shí)施任務(wù)5.4計(jì)算圓的面積執(zhí)行程序①鼠標(biāo)右鍵單擊右側(cè)編輯窗口,在菜單中選擇“Run‘python主程序所在文件名’”一項(xiàng)執(zhí)行編寫好的Python程序,本次實(shí)驗(yàn)文件名為“計(jì)算圓的面積”②在IDE下方控制臺(tái)查看輸出結(jié)果課后練習(xí)與技能訓(xùn)練一、填空題練習(xí)按照作用域的不同,Python中的變量可以分為局部變量和

。在一個(gè)函數(shù)中使用關(guān)鍵字,可以聲明在該函數(shù)中使用的是全局變量、而非局部變量。通過

關(guān)鍵字,可以使內(nèi)層的函數(shù)直接使用外層函數(shù)中定義的變量。

函數(shù)是指在一個(gè)函數(shù)內(nèi)部通過調(diào)用自己來完成一個(gè)問題的求解。

函數(shù)也稱為匿名函數(shù),是一種不使用def定義函數(shù)的形式,其作用是能快速定義一個(gè)簡(jiǎn)短的函數(shù)。lambda函數(shù)的函數(shù)體只是一個(gè)

,所以lambda函數(shù)通常只能實(shí)現(xiàn)比較簡(jiǎn)單的功能。如果內(nèi)層函數(shù)使用了外層函數(shù)中定義的局部變量,并且外層函數(shù)的返回值是內(nèi)層函數(shù)的引用,就構(gòu)成了

。課后練習(xí)與技能訓(xùn)練二、選擇題練習(xí)1.下列說法中錯(cuò)誤的是()在一個(gè)函數(shù)中定義的變量就是局部變量局部變量的作用域是從定義位置到函數(shù)結(jié)束位置在所有函數(shù)外定義的變量就是全局變量全局變量的作用域是從定義位置到程序結(jié)束位置課后練習(xí)與技能訓(xùn)練二、選擇題練習(xí)2.下列關(guān)于裝飾器的說法錯(cuò)誤的是()A.利用裝飾器,可以在不修改已有函數(shù)的情況下向已有函數(shù)中注入代碼,使其具備新的功能B.一個(gè)裝飾器可以為多個(gè)函數(shù)注入代碼,一個(gè)函數(shù)也可以注入多個(gè)裝飾器的代碼C.一個(gè)裝飾器可以為多個(gè)函數(shù)注入代碼,而一個(gè)函數(shù)只能注入一個(gè)裝飾器的代碼D.裝飾器實(shí)際上就是一種閉包課后練習(xí)與技能訓(xùn)練三、簡(jiǎn)答題練習(xí)1.寫出下面程序的輸出結(jié)果。defouter():x=100globalyy=200definner():nonlocalxx=1000y=2000print('inner函數(shù)中的x,y值為:',x,y)inner()print('outer函數(shù)中的x,y值為:',x,y)x=10y=20outer()print("執(zhí)行outer,inner函數(shù)之后x,y值為:",x,y)課后練習(xí)與技能訓(xùn)練三、簡(jiǎn)答題練習(xí)2.寫出下面閉包程序的輸出結(jié)果。deff(x):y=100definner(z):

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論