版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模塊六:程序設(shè)計(jì)基礎(chǔ)《Python》《信息技術(shù)基礎(chǔ)》PWSO04函數(shù)調(diào)用知識(shí)目標(biāo)1.能了解函數(shù)的概念和定義;2.能掌握變量的作用域;3.能夠了解遞歸函數(shù)和匿名單數(shù)。學(xué)習(xí)目標(biāo)1.能夠掌握函數(shù)的傳遞方法;2.采用遞歸的方式解決問(wèn)題。能力目標(biāo)1.具有團(tuán)隊(duì)協(xié)作精神和創(chuàng)新意識(shí);2.具備自主學(xué)習(xí)能力、分析和解決問(wèn)題的能力。素質(zhì)目標(biāo)1任務(wù)描述2任務(wù)解析3知識(shí)鏈接4任務(wù)實(shí)施任務(wù)4:函數(shù)調(diào)用5能力拓展斐波那契數(shù)列(Fibonaccisequence)因是數(shù)學(xué)家萊昂納多·斐波那契以兔子繁殖為例引入的,故又稱(chēng)為“兔子數(shù)列”,其數(shù)值為1、1、2、3、5、8、13、21、34……在數(shù)學(xué)上,這一數(shù)列以如下遞推的方法定義:F(0)=1,F(xiàn)(1)=1,F(xiàn)(n)=F(n-1)+F(n-2)(n
≥2,n
∈N*)。編寫(xiě)程序,輸入任意一個(gè)n的值,計(jì)算F(n)。與數(shù)學(xué)中的函數(shù)定義和使用相似,把程序分成兩部分進(jìn)行編寫(xiě):一部分是函數(shù)定義,用來(lái)完成F(n)的計(jì)算;另一部分是程序的定義,完成輸入n的值,調(diào)用F(n)函數(shù),輸出程序結(jié)果。函數(shù)定義和調(diào)用函數(shù)參數(shù)的傳遞變量的作用域遞歸函數(shù)匿名函數(shù)函數(shù)調(diào)用函數(shù)定義和調(diào)用(一)函數(shù)的概念把具有獨(dú)立功能的代碼塊組織為一個(gè)小模塊就是函數(shù)。函數(shù)是組織好的、可重復(fù)使用的、用來(lái)實(shí)現(xiàn)單一或相關(guān)聯(lián)功能的代碼段。函數(shù)能提高應(yīng)用的模塊性和代碼的重復(fù)利用率。Python提供了許多內(nèi)置函數(shù),比如print()、input()等。用戶(hù)也可以自己創(chuàng)建函數(shù)(即自定義函數(shù))。函數(shù)定義和調(diào)用(二)函數(shù)定義函數(shù)的使用可以分為定義和調(diào)用兩個(gè)部分,先定義,后調(diào)用。Python使用def關(guān)鍵字來(lái)定義函數(shù),語(yǔ)法格式如下。def函數(shù)名([參數(shù)列表]):"""函數(shù)_文檔字符串"""函數(shù)體return[表達(dá)式]說(shuō)明如下。(1)函數(shù)代碼塊以def關(guān)鍵詞開(kāi)頭,后接函數(shù)名和圓括號(hào)及冒號(hào)。(2)參數(shù)列表負(fù)責(zé)接收傳入函數(shù)的數(shù)據(jù),可以包括一個(gè)或多個(gè)參數(shù),也可以為空。(3)"""函數(shù)_文檔字符串"""是注釋?zhuān)梢赃x擇性地說(shuō)明函數(shù)的功能及要傳遞的參數(shù)等。(4)函數(shù)體為函數(shù)被調(diào)用時(shí)執(zhí)行的功能代碼。函數(shù)體可以為空,使用pass語(yǔ)句作為占位符即可。(5)return[表達(dá)式]用于選擇性地返回一個(gè)值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回None(即無(wú)返回值)。函數(shù)定義和調(diào)用(三)函數(shù)調(diào)用函數(shù)在定義完成后不會(huì)立刻執(zhí)行,只有在程序中被調(diào)用時(shí)才會(huì)執(zhí)行。調(diào)用函數(shù)的方法比較簡(jiǎn)單,語(yǔ)法格式如下。函數(shù)名([參數(shù)列表])函數(shù)參數(shù)的傳遞1.位置參數(shù)的傳遞函數(shù)在被調(diào)用時(shí)會(huì)將實(shí)參按照相應(yīng)位置依次傳遞給形參,即將第一個(gè)實(shí)參傳遞給第一個(gè)形參,將第二個(gè)實(shí)參傳遞給第二個(gè)形參,以此類(lèi)推。2.關(guān)鍵字參數(shù)的傳遞函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來(lái)確定傳入的參數(shù)值,關(guān)鍵字參數(shù)的傳遞是通過(guò)“形參=實(shí)參”的格式將實(shí)參按照相應(yīng)關(guān)鍵字傳遞給行參。3.默認(rèn)參數(shù)的傳遞可以在定義函數(shù)時(shí)指定形參的默認(rèn)值,調(diào)用函數(shù)時(shí),可以選擇是否給帶有默認(rèn)值的形參傳值。如果默認(rèn)參數(shù)的值沒(méi)有傳入,則被認(rèn)為是默認(rèn)值。變量的作用域(一)局部變量通常情況下,在函數(shù)內(nèi)部定義的變量稱(chēng)為局部變量,它只能在函數(shù)內(nèi)部使用,函數(shù)執(zhí)行結(jié)束后局部變量就會(huì)被釋放,此時(shí)無(wú)法再訪(fǎng)問(wèn)。在程序中,sum是在函數(shù)中定義的局部變量,只能在foo()函數(shù)內(nèi)部使用。deffoo(x): #定義foo()函數(shù)sum=x+10 #定義局部變量sumreturn(sum)變量的作用域(二)全局變量(1)將變量定義在函數(shù)外,此變量在函數(shù)內(nèi)部或外部區(qū)域均可以訪(fǎng)問(wèn)。當(dāng)在foo()函數(shù)中輸出變量時(shí),輸出的是“l(fā)ocalx:10”,這稱(chēng)為變量的局部作用域。在foo()函數(shù)外部輸出變量時(shí),它會(huì)輸出“globalx:5”,這稱(chēng)為變量的全局作用域。x=5 #定義全局變量xdeffoo(): #定義foo()函數(shù)x=10 #定義局部變量xprint("localx:",x)
#輸出局部變量x的值foo() #調(diào)用foo()函數(shù)print("globalx:",x)
#輸出全局變量x的值變量的作用域(二)全局變量(1)在函數(shù)體內(nèi)定義,使用global關(guān)鍵字將沒(méi)有定義過(guò)的變量聲明為全局變量,語(yǔ)法格式如下。global變量在函數(shù)體內(nèi)外,sum的值都正常輸出。x=5 #定義全局變量xdeffoo(): #定義foo()函數(shù)globalsum #聲明全局變量sumsum=x+10 #計(jì)算sum的值print("globalsum:",sum) #輸出全局變量sum的值foo() #調(diào)用foo()函數(shù)print("globalsum:",sum) #輸出全局變量sum的值輸出結(jié)果如下。globalsum:15globalsum:15遞歸函數(shù)
(一)遞歸函數(shù)的定義與調(diào)用(1)calc_fact(n)是一個(gè)遞歸函數(shù),它調(diào)用了自己。例如,calc_fact(6)=6*calc_fact(5),即每個(gè)函數(shù)將數(shù)字乘以該數(shù)字下面的數(shù)字的階乘,直到它等于1。下面列出了calc_fact(n)函數(shù)調(diào)用及返回的步驟。#定義遞歸函數(shù)calc_fact(n)defcalc_fact(n):"""這是一個(gè)求整數(shù)階乘的遞歸函數(shù)"""ifn==1: #如果n=1return1 #返回1else:return(n*calc_fact(n-1)) #返回n*(n-1)!的結(jié)果#遞歸函數(shù)調(diào)用程序n=6print("Thefactorialof",n,"is",calc_fact(n)) #輸出遞歸函數(shù)結(jié)果值遞歸函數(shù)
(一)遞歸函數(shù)的定義與調(diào)用(2)當(dāng)數(shù)字減少到1時(shí),遞歸結(jié)束,這稱(chēng)為基本條件。每個(gè)遞歸函數(shù)都必須具有停止遞歸的基本條件,否則該函數(shù)將無(wú)限調(diào)用自身。calc_fact(6)
#第一層調(diào)用6*calc_fact(5)
#第二層調(diào)用6*5*calc_fact(4) #第三層調(diào)用6*5*4*calc_fact(3) #第四層調(diào)用6*5*4*3*calc_fact(2) #第五層調(diào)用6*5*4*3*2*calc_fact(1) #第六層調(diào)用6*5*4*3*2*1 #第六層返回6*5*4*3*2 #第五層返回6*5*4*6 #第四層返回6*5*24 #第三層返回6*120 #第二層返回720 #第一層返回遞歸函數(shù)
(二)遞歸函數(shù)的優(yōu)點(diǎn)與缺點(diǎn)1.遞歸函數(shù)的優(yōu)點(diǎn)(1)遞歸函數(shù)使代碼看起來(lái)干凈整潔。(2)使用遞歸可以將復(fù)雜的任務(wù)分解為若干個(gè)更簡(jiǎn)單的子問(wèn)題。(3)與使用嵌套相比,使用遞歸更容易生成序列。2.遞歸的缺點(diǎn)(1)遞歸函數(shù)可能導(dǎo)致棧溢出錯(cuò)誤,特別是在處理大型數(shù)據(jù)集或無(wú)限遞歸的情況下。(2)遞歸調(diào)用代價(jià)很高(效率低),因?yàn)樗鼈冋加么罅績(jī)?nèi)存和時(shí)間。(3)遞歸函數(shù)很難調(diào)試。匿名函數(shù)匿名函數(shù)就是指沒(méi)有名字的函數(shù)。程序設(shè)計(jì)過(guò)程中需要使用一個(gè)函數(shù),但又不想花費(fèi)時(shí)間去命名這個(gè)函數(shù)時(shí),可以使用匿名函數(shù)。Python中使用lambda關(guān)鍵字創(chuàng)建匿名函數(shù),語(yǔ)法格式如下。result=lambda[arg1[,arg2,arg3,...,argn]]:expression①result變量用于調(diào)用lambda語(yǔ)句,接收l(shuí)ambda語(yǔ)句執(zhí)行的結(jié)果。②lambda為定義匿名函數(shù)的關(guān)鍵字。③[arg1[,arg2,arg3,...,argn]]為參數(shù)列表,為非必選項(xiàng),多個(gè)參數(shù)用逗號(hào)分隔。④expression為實(shí)現(xiàn)某一具體功能的表達(dá)式,為必選項(xiàng),有且僅有一個(gè)。如果前面參數(shù)列表中有參數(shù),則該表達(dá)式中必須使用這些參數(shù)。一、程序分析1.定義函數(shù)F(n)按照斐波那契數(shù)列的定義,這個(gè)數(shù)列前兩項(xiàng)為1,從第3項(xiàng)開(kāi)始,每一項(xiàng)都等于前兩項(xiàng)之和,所以定義函數(shù)F(n)的描述如下。如果n==1orn==2,則返回1,否則返回F(n-1)+F(n-2)。2.主程序功能輸入n的值,調(diào)用F(n)函數(shù),輸出程序結(jié)果。二、編寫(xiě)代碼#斐波那契數(shù)列使用defF(n):
#定義斐波那契數(shù)列函數(shù)ifn==1orn==2:return1else:returnF(n-1)+F(n-2)
n=int(input("請(qǐng)輸入n的值:")) #輸入整數(shù)nprint(F(n))
#輸出F(n)三、運(yùn)行結(jié)果請(qǐng)輸入n的值:15610生成器用生成器來(lái)實(shí)現(xiàn)斐波那契數(shù)列的代碼如下。deff():a,b=1,1whileTrue:yieldaa,b=b,a+ba=f()foriinrange(10):
print(a.__next__(),end='')print()foriinf(): #使用for循環(huán)遍歷生成器函數(shù)f()ifi>100:breakprint(i,end='')生成器運(yùn)行結(jié)果如下。11235
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年中國(guó)羊毛紗行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢(xún)報(bào)告
- 高一學(xué)生學(xué)習(xí)計(jì)劃15篇
- 一年級(jí)語(yǔ)文拼音教案
- 我的學(xué)習(xí)計(jì)劃15篇
- 《童年》讀后感(匯編15篇)
- 小班戶(hù)外活動(dòng)親子踩墊子游戲教案
- 初一政治教學(xué)計(jì)劃范文集錦六篇
- 公司年會(huì)活動(dòng)方案模板錦集六篇
- 乒乓球比賽作文300字集合10篇
- 冀教版四年級(jí)科學(xué)上冊(cè)第一單元《物體的運(yùn)動(dòng)》教案
- GB/T 45016-2024發(fā)動(dòng)機(jī)附件帶傳動(dòng)系統(tǒng)機(jī)械式自動(dòng)張緊輪試驗(yàn)方法
- 南寧市三好學(xué)生主要事跡(8篇)
- 2024版玻璃幕墻工程材料采購(gòu)合同2篇
- 2025年婦產(chǎn)科工作計(jì)劃
- 《寒假安全教育班會(huì)》課件模板四套
- (T8聯(lián)考)2025屆高三部分重點(diǎn)中學(xué)12月第一次聯(lián)考 生物試卷(含答案詳解)
- JGJ46-2024 建筑與市政工程施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)
- 報(bào)關(guān)稅費(fèi)代繳服務(wù)合同
- 僅銷(xiāo)售預(yù)包裝食品經(jīng)營(yíng)者備案信息采集表
- 信息化工程建設(shè)項(xiàng)目可行性研究報(bào)告編制要求
- 2024湖南株洲攸縣城關(guān)國(guó)家糧食儲(chǔ)備庫(kù)員工招聘2人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
評(píng)論
0/150
提交評(píng)論