版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第6章函數(shù)與模塊《Python程序設(shè)計現(xiàn)代方法(第2版)》學(xué)習(xí)目標(biāo)/Target
了解函數(shù),能夠說出函數(shù)的概念以及好處
掌握函數(shù)的定義與調(diào)用,能夠正確地定義并調(diào)用函數(shù)
掌握函數(shù)參數(shù)的傳遞方式,能夠通過多種方式給函數(shù)的參數(shù)傳遞數(shù)據(jù)掌握函數(shù)的返回值,能夠根據(jù)需要使用return語句返回函數(shù)處理結(jié)果掌握變量作用域,能夠說出全局變量和局部變量的特點學(xué)習(xí)目標(biāo)/Target
掌握遞歸函數(shù)的使用,能夠運用遞歸函數(shù)解決階乘的問題
掌握匿名函數(shù)的使用,能夠運用匿名函數(shù)簡化簡單函數(shù)的定義
掌握模塊的導(dǎo)入與使用,能夠通過不同語句導(dǎo)入模塊并使用模塊的內(nèi)容
掌握模塊的變量,能夠歸納變量__all__和__name__的作用章節(jié)概述/Summary程序開發(fā)過程中,隨著需要處理的問題變得越來越難,程序也會變得越來越長。冗長的程序牽扯的情況比較復(fù)雜,這不僅增加了閱讀和理解的難度,也不利于后期對程序的維護(hù)與二次開發(fā)。函數(shù)和模塊的出現(xiàn)便解決這些問題,它們?yōu)殚_發(fā)人員提供了豐富的工具和自由度,使得開發(fā)各種復(fù)雜的程序變得更加簡單和高效。本章將詳細(xì)介紹函數(shù)的相關(guān)知識,并簡要介紹一些關(guān)于模塊的知識。目錄/Contents01函數(shù)概述函數(shù)的基礎(chǔ)知識函數(shù)的參數(shù)傳遞0203函數(shù)的返回值04目錄/Contents05變量作用域?qū)嵗褐悄芰奶鞕C器人函數(shù)的特殊形式0607模塊08函數(shù)概述6.16.1函數(shù)概述通常,處理復(fù)雜問題的基本方法是“化繁為簡,分而治之”,也就是說將復(fù)雜的問題分解成若干個足夠小的問題,逐個解決這些小問題,最終達(dá)到解決大問題的目的。例如,把大象裝進(jìn)冰箱可分成三步,分別是打開冰箱門、把大象放進(jìn)去、關(guān)上冰箱門。只要逐個解決上述的小問題,便能解決最初設(shè)定的大問題。同理,在設(shè)計程序時,可以先將程序拆解成若干個小功能,然后逐個實現(xiàn)這些小的功能。程序開發(fā)時,這些小功能可以使用函數(shù)來封裝。6.1函數(shù)概述函數(shù)是一段有組織、可重復(fù)使用的、用來實現(xiàn)單一或相關(guān)聯(lián)功能的代碼段,通過函數(shù)名稱進(jìn)行調(diào)用。函數(shù)可以看作是一段有名字的子程序,可以在需要的地方使用函數(shù)名調(diào)用執(zhí)行。6.1函數(shù)概述函數(shù)是一種功能抽象,它可以實現(xiàn)特定的功能,就像黑箱模型一樣。黑箱模型是指所建立的模型只考慮輸入與輸出,而與過程、機理無關(guān)?,F(xiàn)實生活中,許多實物應(yīng)用了黑箱原理,比如洗衣機。使用者只需要了解洗衣機的使用方法,將洗衣粉和水放入洗衣機中,就可以得到洗干凈的衣服。同樣地,對于函數(shù),外界不需要了解其內(nèi)部的實現(xiàn)原理,只需要了解函數(shù)的輸入輸出方式即可使用。換言之,調(diào)用函數(shù)時以不同的參數(shù)作為輸入,以執(zhí)行函數(shù)后以函數(shù)的返回值作為輸出。6.1函數(shù)概述函數(shù)大體可以劃分為兩類,一類是系統(tǒng)內(nèi)置的函數(shù),它們由Python標(biāo)準(zhǔn)庫提供,例如,前面章節(jié)中學(xué)習(xí)的print()、input()、type()、int()等函數(shù);另一類是自定義函數(shù),即用戶根據(jù)需求定義的具有特定功能的一段代碼。自定義函數(shù)像一個具有某種特殊功能的容器——將多條語句組成一個有名稱的代碼段,以實現(xiàn)具體的功能。6.1函數(shù)概述使用函數(shù)的好處主要體現(xiàn)在以下幾方面:提高代碼的可讀性和可維護(hù)性。將功能封裝成函數(shù),可以使代碼更加模塊化,易于理解和修改。減少代碼的重復(fù)性。通過函數(shù)封裝重復(fù)的功能,可以避免代碼冗余,提高代碼的復(fù)用性。提高程序的可擴展性。使用函數(shù)可以將不同的功能組合在一起,從而實現(xiàn)更復(fù)雜的功能。提高程序的可靠性。將功能封裝成函數(shù)可以減少代碼中的錯誤,降低程序出錯的風(fēng)險。提高程序的性能。通過函數(shù)封裝重復(fù)的功能,可以減少代碼執(zhí)行的時間和空間復(fù)雜度,提高程序的性能。函數(shù)的基礎(chǔ)知識6.26.2.1函數(shù)的定義Python使用def關(guān)鍵字定義函數(shù),基本語法格式如下:關(guān)鍵字def:標(biāo)志著函數(shù)的開始。函數(shù)名:函數(shù)的唯一標(biāo)識,其命名方式遵循標(biāo)識符的命名規(guī)則。參數(shù)列表:可以有零個、一個或多個參數(shù),多個參數(shù)之間使用英文逗號分隔。根據(jù)參數(shù)的有無,函數(shù)分為有參函數(shù)和無參函數(shù)。冒號:用于標(biāo)記函數(shù)體的開始。文檔字符串:用于描述函數(shù)的功能,可以省略。函數(shù)體:函數(shù)每次調(diào)用時執(zhí)行的代碼,由一行或多行語句構(gòu)成。return語句:標(biāo)志著函數(shù)的結(jié)束,用于將函數(shù)的處理結(jié)果返回給函數(shù)調(diào)用者。若函數(shù)需要返回值,則使用return語句返貨,否則return語句可以省略。def函數(shù)名([參數(shù)列表]):['''文檔字符串''']
函數(shù)體 [return語句]6.2.1函數(shù)的定義定義函數(shù)時,函數(shù)參數(shù)列表中的參數(shù)是形式參數(shù),簡稱為“形參”,形參用來接收調(diào)用函數(shù)時傳入函數(shù)的參數(shù)。注意,形參只會在函數(shù)被調(diào)用的時候才分配內(nèi)存空間,一旦調(diào)用結(jié)束就會即刻釋放,因此,形參只有在函數(shù)內(nèi)部有效。defmy_absolute(x):ifx>=0:print(x)else:print(-x)定義一個求絕對值的函數(shù),示例如下:6.2.2函數(shù)的調(diào)用函數(shù)定義好之后不會立即執(zhí)行,直到被程序調(diào)用時才會生效。調(diào)用函數(shù)的方式非常簡單,一般形式如下:函數(shù)名([參數(shù)列表])例如,調(diào)用6.2.1中定義好的my_absolute()函數(shù),代碼如下:my_absolute(-10.0)以上形式的參數(shù)列表中的參數(shù)是實際參數(shù),簡稱為“實參”,它們可以是常量、變量、表達(dá)式、函數(shù)等,這些實參會根據(jù)它們在函數(shù)定義中出現(xiàn)的順序或名稱與函數(shù)中的形參進(jìn)行匹配,并在匹配成功后被傳遞給形參。6.2.2函數(shù)的調(diào)用程序在執(zhí)行時,若遇到函數(shù)調(diào)用,會經(jīng)歷以下流程:程序在函數(shù)調(diào)用處暫停執(zhí)行;將實參傳入函數(shù)的形參;執(zhí)行函數(shù)體中的語句;程序接收函數(shù)的返回值并繼續(xù)執(zhí)行。若函數(shù)沒有返回值,則會省略接收返回值的步驟。6.2.2函數(shù)的調(diào)用下面以my_absolute()函數(shù)為例,為大家介紹函數(shù)的調(diào)用過程。假設(shè)定義和調(diào)用my_absolute()函數(shù)的完整代碼如下:defmy_absolute(x):ifx>=0:print(x)else:print(-x)my_absolute(-10.0)print("---程序結(jié)束---")函數(shù)的參數(shù)傳遞6.36.3.1位置傳遞當(dāng)調(diào)用函數(shù)時,默認(rèn)情況下實參會按照位置順序傳遞給對應(yīng)的形參,即將第一個實參傳遞給第一個形參,第二個實參傳遞給第二個形參,以此類推。deftest_param(a,b,c):print(a,b,c)test_param(1,2,3)6.3.2關(guān)鍵字傳遞雖然位置傳遞的方式比較便捷,但是如果形參的數(shù)目過多,開發(fā)者很難記住每個形參的作用,這時可以通過關(guān)鍵字傳遞的方式給形參傳值,這里的關(guān)鍵字就是形參的名稱。當(dāng)調(diào)用函數(shù)時,通過“形參名=實參”的形式將形參與實參關(guān)聯(lián),按照形參的名稱進(jìn)行參數(shù)傳遞,它允許實參和形參的順序不一致。deftest_param(a,b,c):print(a,b,c)test_param(a=1,c=3,b=2)多學(xué)一招:僅限位置和權(quán)限關(guān)鍵字僅限位置,顧名思義就是調(diào)用函數(shù)時只能根據(jù)位置將實參傳遞給形參,不能再根據(jù)關(guān)鍵字將實參傳遞給形參。當(dāng)定義函數(shù)時,只要在函數(shù)的形參前面明確使用符號/,那么/前面的形參需要嚴(yán)格遵守僅限位置的要求。deftest_param(a,b,/,c):#定義函數(shù),部分參數(shù)遵守僅限位置的要求print(a,b,c)test_param(1,2,3)test_param(1,2,c=3)1.僅限位置多學(xué)一招:僅限位置和權(quán)限關(guān)鍵字僅限關(guān)鍵字,顧名思義就是調(diào)用函數(shù)時只能根據(jù)關(guān)鍵字將實參傳遞給形參,不能再根據(jù)位置將實參傳遞給形參。當(dāng)定義函數(shù)時,只要在函數(shù)的形參前面明確使用符號*,那么符號*后面的形參需要嚴(yán)格遵守僅限關(guān)鍵字的要求。2.僅限關(guān)鍵字deftest_param(a,*,b,c):#定義函數(shù),部分參數(shù)遵守僅限關(guān)鍵字的要求print(a,b,c)test_param(1,b=2,c=3)test_param(a=1,b=2,c=3)6.3.3默認(rèn)值傳遞在定義函數(shù)時可以給每個形參指定默認(rèn)值,基本形式為“形參名=默認(rèn)值”,這樣在調(diào)用時既可以給帶有默認(rèn)值的形參傳遞實參,以便重新為該形參賦值,也可以省略相應(yīng)的實參,使用形參的默認(rèn)值。deftest_param(a,b,c=6print(a,b,c)test_param(1,2,3)test_param(1,2)6.3.4包裹傳遞若函數(shù)在定義時無法確定接收多少個實參,那么可以在定義函數(shù)時給形參名稱添加“*”或“**”。若一個形參名稱前面加上“*”,它可以接收一個以元組形式包裹的多個實參。若一個形參名稱前面加上“**”,它可以接收一個以字典形式包裹的多個實參。例如,定義一個形參為*args的函數(shù),代碼如下deftest_param(*args):#定義函數(shù),該函數(shù)有一個加*的形參print(args)調(diào)用以上定義的test_param()函數(shù)可以傳入多個實參,比如傳入5個實參,代碼如下:
test_param(1,2,3,4,5)6.3.4包裹傳遞例如,定義一個形參為**kwargs的函數(shù),代碼如下:deftest_param(**kwargs):#定義函數(shù),該函數(shù)有一個加**的形參print(kwargs)調(diào)用以上定義的test_param()函數(shù)時可以傳入多個實參,比如傳入5個實參,代碼如下:test_param(a=1,b=2,c=3,d=4,e=5)6.3.5解包裹傳遞在調(diào)用函數(shù)時,若函數(shù)接收的實參為元組或字典類型,可以使用“*”和“**”對實參解包裹,將實參拆分為多個值,并按照位置傳遞或關(guān)鍵字傳遞的方式將實參賦給形參。deftest_param(a,b,c):print(a,b,c)tuple_demo=(1,2,3)test_param(*tuple_demo)#調(diào)用函數(shù),使用*對實參解包裹6.3.5解包裹傳遞下面再來看一下對字典解包裹的示例,代碼如下:dict_demo={'a':1,'b':2,'c':3}test_param(**dict_demo)#調(diào)用函數(shù),使用**對實參解包裹6.3.6混合傳遞前面介紹的幾種參數(shù)傳遞的方式可以混合使用,但是在定義函數(shù)或調(diào)用函數(shù)時需要注意前后的順序。在定義函數(shù)時,帶默認(rèn)值的形參必須位于普通形參(不帶默認(rèn)值或標(biāo)識的形參)之后,帶“**”標(biāo)識的形參必須位于帶“*”標(biāo)識的形參之后。6.3.6混合傳遞當(dāng)調(diào)用具有以上幾種形參的函數(shù)時,需要遵循一定的規(guī)則:優(yōu)先按照位置傳遞;其次按照關(guān)鍵字傳遞;再次按照默認(rèn)值傳遞;最后按照包裹傳遞。6.3.6混合傳遞例如,定義一個函數(shù),該函數(shù)包含多種形式的形參,具體代碼如下:deftest_param(a,b,c=33,*args,**kwargs):print(a,b,c,args,kwargs)調(diào)用test_param()函數(shù)時,依次傳入不同個數(shù)和形式的實參,具體代碼如下:test_param(1,2)test_param(1,2,c=3)test_param(1,2,3,'a','b')test_param(1,2,3,'a','b',x=99)函數(shù)的返回值6.46.4函數(shù)的返回值函數(shù)中的return語句是可選項,它可以出現(xiàn)在函數(shù)體的任何位置,作用是結(jié)束當(dāng)前函數(shù),返回到函數(shù)被調(diào)用的位置繼續(xù)執(zhí)行程序,同時將函數(shù)處理的結(jié)果返回函數(shù)調(diào)用者。6.4函數(shù)的返回值下面編寫一個函數(shù),該函數(shù)用于判斷鍵盤輸入的字符串是否以大寫字母開頭,并返回判斷結(jié)果,示例如下:defis_capital(words):iford("A")<=ord(words[0])<=ord("Z"):return'首字母是大寫的'else:return'首字母不是大寫的'result=is_capital("Python")#將函數(shù)返回的判斷結(jié)果賦給變量print(result)6.4函數(shù)的返回值函數(shù)中的return語句可以返回多個值,這些值將以元組形式保存。例如,定義一個控制游戲角色移動的函數(shù)move(),使用return語句返回反應(yīng)角色當(dāng)前位置的nx和ny,代碼如下:defmove(x,y,step):nx=x+stepny=y-stepreturnnx,ny#使用return語句返回多個值result=move(100,100,60)print(result)變量作用域6.56.5.1局部變量在函數(shù)內(nèi)部定義的變量稱為局部變量,局部變量只能在定義它的函數(shù)內(nèi)部使用。局部變量的作用域僅限于定義它的函數(shù)范圍內(nèi),同一個作用域內(nèi),不允許出現(xiàn)同名變量。deftest():count=0 #定義一個局部變量print(count) #函數(shù)內(nèi)部訪問局部變量test()print(count) #函數(shù)外部訪問局部變量例如,定義一個包含局部變量count的函數(shù)test(),在函數(shù)的內(nèi)部和外部分別訪問這個局部變量count,代碼如下:6.5.2全局變量全局變量是指在整個程序中都可以使用的變量,它們一般定義在函數(shù)外部,并且在整個程序運行期間占用存儲單元。默認(rèn)情況下,函數(shù)的內(nèi)部只能訪問全局變量,而不能修改全局變量的值。6.5.2全局變量count=10#定義一個全局變量deftest():count=11#函數(shù)內(nèi)部嘗試修改全局變量的值print(count)test()print(count)例如,定義的test()函數(shù),完整代碼如下:運行代碼,結(jié)果如下所示:1110函數(shù)的內(nèi)部并沒有成功修改全局變量的值,而是定義了一個與全局變量同名的局部變量。6.5.2全局變量在函數(shù)內(nèi)部若要修改全局變量的值,需要在修改之前使用關(guān)鍵字global進(jìn)行聲明,使聲明的變量提升為全局變量,語法格式如下:global全局變量在test()函數(shù)中使用關(guān)鍵字global聲明變量count,并對變量count進(jìn)行修改,代碼如下:count=10#全局變量deftest():globalcount#提升count為全局變量count=11#函數(shù)內(nèi)修改count的值print(count)test()print(count)多學(xué)一招:LEGB法則LEGB是程序中搜索變量時所遵循的原則,該原則中的每個字母指代一種作用域,具體如下:L(local):局部作用域,例如局部變量和形參生效的區(qū)域。;E(enclosing):嵌套作用域,例如嵌套定義的外層函數(shù)中定義的變量生效的區(qū)域。G(global):全局作用域,例如全局變量生效的區(qū)域。B(built-in):內(nèi)置作用域,例如,內(nèi)置模塊定義的變量生效的區(qū)域。Python在搜索變量時會按照“L-E-G-B”這個順序依次在這四種區(qū)域中搜索:若搜索到變量則終止搜索,使用搜索到的變量;若搜索完L、E、G、B這四種區(qū)域仍無法找到變量,程序會出現(xiàn)報錯信息。實例:智能聊天機器人6.66.6實例:智能聊天機器人近年來,智能聊天機器人在國內(nèi)得到廣泛應(yīng)用,涵蓋從企業(yè)客戶服務(wù)到教育和醫(yī)療等領(lǐng)域,解決了人們?nèi)粘I钪械膯栴},提供了更加便捷、高效、智能的服務(wù)。比如,科大訊飛推出的語音AI主播“小晴”,能夠根據(jù)文本稿件模擬真人聲音進(jìn)行主播工作;深圳某職業(yè)學(xué)校推出的AI識別模擬考場程序——“AI超級智能考場監(jiān)考系統(tǒng)”,可自動監(jiān)測學(xué)生考試數(shù)據(jù),為學(xué)生成績考核提供便利;百度推出的智能聊天機器人“小度”能夠自然流暢地與用戶進(jìn)行信息、服務(wù)、情感等多方面的交流。6.6實例:智能聊天機器人本實例要求實現(xiàn)一個簡易智能聊天機器人——小智,用于幫助用戶解答百科知識的問題,具體要求如下。(1)機器人默認(rèn)會解答5個問題,這5個問題分別是詩仙是誰、中國第一個朝代、三十六計的第一計是什么、天府之國是中國的哪個地方、中國第一長河,答案分別是李白、夏朝、瞞天過海、四川、長江。(2)機器人有3項功能,分別是訓(xùn)練、對話和離開,若用戶從鍵盤輸入t,說明用戶想訓(xùn)練機器人,此時機器人需要記錄訓(xùn)練的新問題及答案;若用戶從鍵盤輸入c,說明用戶想跟機器人對話,此時機器人需要回答用戶提出的問題;若用戶從鍵盤輸入l,說明讓機器人離開,此時機器人需要退出程序。6.6實例:智能聊天機器人本實例的實現(xiàn)思路可以分成以下步驟:(1)定義一個表示問題庫變量,用于保存機器人能夠回答的所有問題與答案。(2)定義兩個全局變量,分別用于記錄機器人初始的狀態(tài)標(biāo)記和工作標(biāo)記。(3)定義一個用于訓(xùn)練機器人的函數(shù),該函數(shù)包含兩個參數(shù),用于接收用戶輸入的新問題及其答案。6.6實例:智能聊天機器人本實例的實現(xiàn)思路可以分成以下步驟:(4)定義一個用于跟機器人對話的函數(shù),該函數(shù)包含一個參數(shù),用于接收用戶提出的問題。(5)通過while語句控制用戶使用機器人操作的完整流程。(6)在循環(huán)內(nèi)部,通過input()函數(shù)接收用戶輸入的選項,通過if-elif-else語句判斷選項是否為c、t、l或其他這幾種情況,更新機器人的狀態(tài)標(biāo)記,并在各個分支下實現(xiàn)對應(yīng)的功能。函數(shù)的特殊形式6.76.7.1匿名函數(shù)匿名函數(shù)是一類無須定義標(biāo)識符的函數(shù),它與普通函數(shù)一樣可以在程序的任何位置使用,但是在定義時被嚴(yán)格限定為單一表達(dá)式。Python中使用lambda關(guān)鍵字定義匿名函數(shù),它的語法格式如下:lambda<形式參數(shù)列表>:<表達(dá)式>6.7.1匿名函數(shù)與普通函數(shù)相比,匿名函數(shù)的體積更小,功能更單一,它只是一個為簡單任務(wù)服務(wù)的對象,它們的主要區(qū)別如下:普通函數(shù)在定義時有名稱,而匿名函數(shù)沒有名稱;普通函數(shù)的函數(shù)體中包含有多條語句,而匿名函數(shù)的函數(shù)體只能是一個表達(dá)式;普通函數(shù)可以實現(xiàn)比較復(fù)雜的功能,而匿名函數(shù)可實現(xiàn)的功能比較簡單;普通函數(shù)能被其他程序使用,而匿名函數(shù)不能被其他程序使用。6.7.1匿名函數(shù)定義好的匿名函數(shù)不能直接使用,最好使用一個變量保存它,以便后期可以隨時使用。例如,定義一個計算數(shù)值平方的匿名函數(shù),并將其返回值賦值給一個變量:temp=lambdax:pow(x,2)#定義匿名函數(shù),它返回的函數(shù)對象賦值給變量temp此時,變量temp可以作為匿名函數(shù)的臨時名稱來調(diào)用函數(shù),示例如下:result=temp(10)print(result)6.7.2遞歸函數(shù)遞歸是指函數(shù)對自身的調(diào)用,它可以分為以下兩個階段:遞推:遞歸本次的執(zhí)行都基于上一次的運算結(jié)果。回溯:遇到終止條件時,則沿著遞推往回一級一級地把值返回來。遞歸函數(shù)通常用于解決結(jié)構(gòu)相似的問題,其基本的實現(xiàn)思路是將一個復(fù)雜的問題轉(zhuǎn)化成若干個子問題,子問題的形式和結(jié)構(gòu)與原問題相似,求出子問題的解之后根據(jù)遞歸關(guān)系可以獲得原問題的解。6.7.2遞歸函數(shù)遞歸有兩個基本要素:基例:子問題的最小規(guī)模,用于確定遞歸何時終止,也稱為遞歸出口。遞歸模式:將復(fù)雜問題分解成若干子問題的基礎(chǔ)結(jié)構(gòu),也稱為遞歸體。遞歸函數(shù)的一般形式如下:def函數(shù)名稱(參數(shù)列表): if基例:
rerun基例結(jié)果 else:
return遞歸體6.7.2遞歸函數(shù)遞歸最經(jīng)典的應(yīng)用就是階乘,例如,求n的階乘,數(shù)學(xué)中使用函數(shù)fact(n)表示:fact(n)=n!=1*2*3*...*(n-1)*n=fact(n-1)*n在程序中定義fact()函數(shù)實現(xiàn)階乘計算,可以寫成如下形式:deffact(n):ifn==1:#基例return1else:returnfact(n-1)*n#遞歸體6.7.2遞歸函數(shù)假設(shè)現(xiàn)在要求5的階乘,則遞歸函數(shù)的整個執(zhí)行過程如圖所示。6.7.2遞歸函數(shù)計算斐波那契數(shù)列也是遞歸的一個經(jīng)典應(yīng)用。斐波那契數(shù)列又稱黃金分割數(shù)列,這個數(shù)列從第三項開始,它的每一項都等于前兩項的和。在數(shù)學(xué)上,斐波納契數(shù)列以遞推的方式定義,如下所示:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)根據(jù)以上定義,斐波那契數(shù)列的前9項依次為:1、1、2、3、5、8、13、21、34。6.7.2遞歸函數(shù)斐波那契數(shù)列是以兔子繁殖為例子而引入,故又稱為“兔子數(shù)列”。兔子繁殖的故事是這樣的,一般兔子在出生兩個月后就有繁殖能力,一對兔子每個月能生出一對小兔子來,如果所有的兔子都不死,那么一年以后一共有多少對兔子?6.7.2遞歸函數(shù)下面針對兔子繁殖的問題進(jìn)行具體地分析:第一個月,兔子沒有繁殖能力,此時兔子的總數(shù)量為1對;第二個月,兔子擁有了繁殖能力,生下一對小兔子,此時兔子的總數(shù)量為2對;第三個月,兔子又生下一對小兔子,而小兔子沒有繁殖能力,此時兔子的總數(shù)量為3對;......依此類推,可以得到如下兔子數(shù)量統(tǒng)計表:經(jīng)過月份0123456789101112幼崽對數(shù)101123581321345589成兔對數(shù)01123581321345589144總體對數(shù)11235813213455891442336.7.2遞歸函數(shù)使用代碼實現(xiàn)計算兔子數(shù)列的函數(shù),具體如下所示:defrabbit(month):
ifmonth==1:
return1
else:
returnrabbit(month-2)+rabbit(month-1)調(diào)用上述函數(shù),可計算出經(jīng)過一年以后,兔子的總數(shù)量為,代碼如下:result=rabbit(12)print(result)模塊6.86.8.1模塊的導(dǎo)入和使用1.使用import語句導(dǎo)入模塊import語句支持一次導(dǎo)入一個模塊,也支持一次導(dǎo)入多個模塊。使用import語句導(dǎo)入模塊的語法格式如下。import模塊1,模塊2,…例如,導(dǎo)入Python中內(nèi)置的模塊random和time,代碼如下:importtime #導(dǎo)入一個模塊importrandom,time #導(dǎo)入多個模塊6.8.1模塊的導(dǎo)入和使用導(dǎo)入模塊以后,可以通過“.”使用模塊中的內(nèi)容,包括全局變量、函數(shù)或類。使用模塊內(nèi)容的語法格式如下。模塊名.變量名/函數(shù)名()/類名
例如,使用time模塊中sleep()函數(shù),示例如下:time.sleep(1)使用as關(guān)鍵字給模塊起別名的語法格式如下。import模塊名as別名1.使用import語句導(dǎo)入模塊6.8.1模塊的導(dǎo)入和使用使用import語句導(dǎo)入模塊后,每次使用模塊時都需要添加“模型名.”前綴,非常繁瑣。為了減少這樣的麻煩,Python提供了另外一種導(dǎo)入模塊的語句from-import-。使用from-import-方式導(dǎo)入模塊之后,無需添加前綴,可以像使用當(dāng)前程序中的內(nèi)容一樣使用模塊中的內(nèi)容。使用from-import-語句導(dǎo)入模塊的語法格式如下。from模塊名import變量名/函數(shù)名/類名例如,導(dǎo)入time模塊中的sleep()函數(shù)和time()函數(shù),具體代碼如下。fromtimeimportsleep,time2.使用from-import-語句導(dǎo)入模塊6.8.1模塊的導(dǎo)入和使用如果希望一次性導(dǎo)入模塊中的全部內(nèi)容,可以將from...import...語句中import后面的內(nèi)容替換為通配符“*”。導(dǎo)入模塊中全部內(nèi)容的語法格式如下。from模塊名import*例如,導(dǎo)入time模塊中的全部內(nèi)容,具體代碼如下。fromtimeimport*2.使用from-import-語句導(dǎo)入模塊6.8.1模塊的導(dǎo)入和使用from-import-語句也支持為模塊或模塊中的內(nèi)容起別名,其語法格式如下。from模塊名import變量名/函數(shù)名/類名as別名例如,給time模塊中的sleep()函數(shù)起別名為sl,具體代碼如下。fromtimeimportsleepasslsl(1)#sl為sleep()函數(shù)的別名2.使用from-import-語句導(dǎo)入模塊6.8.2模塊的變量1.
__all__變量Python模塊的開頭通常會定義一個__all__變量,該變量的值實際上是一個列表,列表中包含的元素決定了在使用from-import*語句導(dǎo)入模塊后可以使用模塊的哪些內(nèi)容。如果__all__中只包含模塊中的部分內(nèi)容,那么from-import*語句只會將__all__中包含的部分內(nèi)容導(dǎo)入程序。6.8.2模塊的變量下面創(chuàng)建兩個模塊calc.py和test.py,分步驟演示如何通過__all__變量限制導(dǎo)入這兩個模塊的內(nèi)容,具體步驟如下。(1)創(chuàng)建模塊calc.py,該模塊中包含一個__all__變量和四個計算兩個數(shù)的四則運算的函數(shù),具體代碼如下:#定義變量__all__,用于限制導(dǎo)入模塊的內(nèi)容__all__=["add","subtract"]defadd(a,b):returna+bdefsubtract(a,b):returna-bdefmultiply(a,b):returna*bdefdivide(a,b):if(b):returna/b
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包草地合同(2篇)
- 2025年度數(shù)據(jù)中心農(nóng)民工用工合同4篇
- 二手房交易法律合同模板2024一
- 2025年度個人貸款合同風(fēng)險評估與管理規(guī)范4篇
- 二零二五年度國際貨物保險合同條款及理賠細(xì)則3篇
- 2025年度臨時臨時臨時停車場租賃合同2篇
- 2025年度個人股權(quán)分割及轉(zhuǎn)讓合同3篇
- 個人與個人2024年度汽車租賃合同3篇
- 二零二五年度寧波勞動合同模板:包含員工勞動合同變更條款
- 二零二五年度外匯借款合同風(fēng)險防范與應(yīng)對策略
- 2024年資格考試-對外漢語教師資格證筆試參考題庫含答案
- 軟件研發(fā)安全管理制度
- 三位數(shù)除以兩位數(shù)-豎式運算300題
- 寺院消防安全培訓(xùn)課件
- 比摩阻-管徑-流量計算公式
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、異丙醇和正丁醇檢驗
- 五年級數(shù)學(xué)應(yīng)用題100道
- 西方經(jīng)濟學(xué)(第二版)完整整套課件(馬工程)
- 高三開學(xué)收心班會課件
- GB/T 33688-2017選煤磁選設(shè)備工藝效果評定方法
- 科技計劃項目申報培訓(xùn)
評論
0/150
提交評論