版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
任務(wù)1模塊的導(dǎo)入和使用01任務(wù)2包的導(dǎo)入和使用02327任務(wù)1
模塊的導(dǎo)入和使用3281.?了解模塊的概念。2.?了解模塊化編程的概念。3.?了解模塊化程序設(shè)計(jì)的優(yōu)越性。4.?熟悉模塊的設(shè)計(jì)與實(shí)現(xiàn)方法。5.?掌握模塊的導(dǎo)入、使用和重新加載方法。6.?掌握模塊中成員的導(dǎo)入方法。7.?能進(jìn)行模塊及其元素的導(dǎo)入并調(diào)用模塊。任務(wù)目標(biāo)329一、模塊的概念在前面的項(xiàng)目中已經(jīng)使用了很多模塊(如string、time等),通過向程序中導(dǎo)入這些模塊,可以使用很多“現(xiàn)成”的函數(shù)實(shí)現(xiàn)需要的功能。模塊就是Python程序。換句話說,任何Python程序都可以作為模塊。經(jīng)過前面的學(xué)習(xí),我們已經(jīng)能夠?qū)ython代碼寫到一個文件中,但隨著程序功能越來越復(fù)雜,程序體積會不斷變大,為了便于維護(hù),通常會將其分為多個文件(模塊),這樣不僅可以提高代碼的可維護(hù)性,還可以提高代碼的可重用性。相關(guān)知識330代碼的可重用性體現(xiàn)在,當(dāng)編寫好一個模塊后,只要編程過程中需要用到該模塊中的某個功能(由變量、函數(shù)、類實(shí)現(xiàn)),無須做重復(fù)性的編寫工作,直接在程序中導(dǎo)入該模塊即可使用該功能。前面講了封裝,并且介紹了很多具有封裝特性的結(jié)構(gòu),如諸多容器(列表、元組、字符串、字典等),它們都是對數(shù)據(jù)的封裝;函數(shù)是對Python代碼的封裝;類是對方法和屬性的封裝,也可以說是對函數(shù)和數(shù)據(jù)的封裝。模塊可以理解為對代碼更高級的封裝,即把能夠?qū)崿F(xiàn)某一特定功能的代碼編寫在同一個Python文件中,并將其作為一個獨(dú)立的模塊,這樣既可以方便其他程序或腳本導(dǎo)入并使用,又能有效避免函數(shù)名和變量名發(fā)生沖突。331二、模塊化編程1.?模塊化程序設(shè)計(jì)在進(jìn)行程序設(shè)計(jì)時,將系統(tǒng)按照功能劃分為若干部分,每個部分完成特定功能,通過在不同部分間建立聯(lián)系實(shí)現(xiàn)互相協(xié)作,完成系統(tǒng)功能的方式稱為模塊化程序設(shè)計(jì),這些提供計(jì)算功能的程序塊稱為模塊(或函數(shù)模塊),導(dǎo)入并使用這些模塊的程序稱為客戶端程序。使用模塊可以將計(jì)算任務(wù)分解為大小合理的子任務(wù),并實(shí)現(xiàn)代碼的重用。3322.?模塊的API在模塊化程序設(shè)計(jì)中,客戶端使用模塊所提供的函數(shù)時,無須深入了解函數(shù)的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。模塊與客戶端之間的協(xié)定稱為API(applicationprogramminginterface,應(yīng)用程序接口)。API清楚地描述了模塊中提供的函數(shù)的功能和使用方法。模塊化程序設(shè)計(jì)的基本原則是,首先設(shè)計(jì)好API,即定義模塊所提供的函數(shù)或類的功能描述。然后,在此基礎(chǔ)上編寫具體的程序代碼實(shí)現(xiàn)模塊中的函數(shù)或類。最后,客戶端可以通過導(dǎo)入模塊,并使用其中的函數(shù)或類,實(shí)現(xiàn)所需的功能,而無須關(guān)心其內(nèi)部的具體實(shí)現(xiàn)細(xì)節(jié)。333通過內(nèi)置函數(shù)help可以查看Python模塊的API。其語法格式如下。import模塊名help(模塊名)在查看模塊的API之前,需要使用import語句導(dǎo)入模塊,也可以使用Python在線幫助查看模塊的API。3343.?模塊的實(shí)現(xiàn)“實(shí)現(xiàn)”是指實(shí)現(xiàn)用于重用的函數(shù)或類的代碼,模塊的實(shí)現(xiàn)就是若干實(shí)現(xiàn)函數(shù)或類的代碼的集合,保存在擴(kuò)展名為“.py”的文件中。模塊的實(shí)現(xiàn)必須遵循API,可以采用不同算法實(shí)現(xiàn)API,這為模塊的改進(jìn)和版本升級提供了無縫對接,只需要使用遵循API的新的實(shí)現(xiàn),所有客戶端程序無須修改即可正常運(yùn)行。模塊通常是使用Python編寫的程序(“.py”文件)。Python內(nèi)置模塊使用C編寫并已鏈接到Python解釋器中,還可以使用C或C++拓展編寫模塊(編譯為共享庫或DLL文件)。3354.?模塊的客戶端客戶端在使用模塊時,需要遵循模塊所提供的API調(diào)用接口,以導(dǎo)入和調(diào)用模塊中已實(shí)現(xiàn)的函數(shù)功能。API的存在使得任何客戶端都可以直接使用模塊,而無須深入檢查模塊內(nèi)部的代碼實(shí)現(xiàn)。336三、模塊化程序設(shè)計(jì)的優(yōu)越性模塊化程序設(shè)計(jì)是現(xiàn)代程序設(shè)計(jì)的基本理念之一,具有如下優(yōu)越性。(1)可以編寫大規(guī)模的系統(tǒng)程序:通過把復(fù)雜的任務(wù)分解為多個子任務(wù),團(tuán)隊(duì)合作開發(fā),以完成大規(guī)模的系統(tǒng)程序。(2)控制程序的復(fù)雜度:分解后的子任務(wù)的實(shí)現(xiàn)模塊代碼規(guī)模一般被控制在數(shù)百行之內(nèi),從而可以控制程序的復(fù)雜度,各代碼調(diào)試可以限制在少量的代碼范圍內(nèi)。(3)實(shí)現(xiàn)代碼重用:一旦實(shí)現(xiàn)了通用模塊(如math、random等),任何客戶端都可以通過導(dǎo)入模塊直接重用代碼,而無須重復(fù)實(shí)現(xiàn)。(4)增強(qiáng)程序的可維護(hù)性:模塊化程序設(shè)計(jì)可以增強(qiáng)程序的可維護(hù)性。337四、模塊的設(shè)計(jì)與實(shí)現(xiàn)1.?模塊設(shè)計(jì)的一般原則(1)先設(shè)計(jì)API,再實(shí)現(xiàn)模塊。(2)控制模塊的規(guī)模,只為客戶端提供需要的函數(shù)。實(shí)現(xiàn)包含大量函數(shù)的模塊會導(dǎo)致模塊的復(fù)雜度高。(3)在模塊中編寫測試代碼,并消除全局代碼。(4)使用私有函數(shù)實(shí)現(xiàn)不被外部客戶端調(diào)用的模塊函數(shù)。(5)通過文檔提供模塊幫助信息。3382.?API設(shè)計(jì)API通常由可用函數(shù)的簽名的精確規(guī)范和描述函數(shù)作用的非正式自然語言兩部分組成。API一般使用表格的形式描述模塊中的變量、函數(shù)和類。在編寫一個新模塊時,建議先設(shè)計(jì)API,然后實(shí)現(xiàn)模塊。3393.?創(chuàng)建模塊Python模塊對應(yīng)于包含Python代碼的源文件(其擴(kuò)展名為“.py”)。在模塊中除了可以定義變量、函數(shù)和類,還可以包含一般的語句,即主塊語句。當(dāng)運(yùn)行該模塊或?qū)朐撃K時,主塊語句將依次執(zhí)行。一般而言,獨(dú)立運(yùn)行的源碼中主要包含主塊語句,以實(shí)現(xiàn)響應(yīng)的功能。作為庫的模塊,主要包含可供調(diào)用的變量、函數(shù)和類,還可以包含用于測試的主塊代碼。注意:主塊代碼只在模塊第一次被導(dǎo)入時執(zhí)行,重復(fù)導(dǎo)入時不會多次導(dǎo)入、多次執(zhí)行。3404.?模塊的私有函數(shù)在實(shí)現(xiàn)模塊時,有時候需要在模塊中定義僅在模塊中使用的輔助函數(shù)。輔助函數(shù)不提供給客戶端直接調(diào)用,故稱之為私有函數(shù)。按慣例,應(yīng)使用以下畫線開始的函數(shù)名作為私有函數(shù)名。私有函數(shù)在客戶端不能直接調(diào)用,故API中不包括私有函數(shù)。Python沒有強(qiáng)制不允許調(diào)用私有函數(shù)的機(jī)制,但應(yīng)避免直接調(diào)用私有函數(shù)。3415.?模塊的測試代碼每一個模塊都有一個名稱,通過特殊變量__name__可以獲取模塊的名稱。特別地,當(dāng)一個模塊被用戶單獨(dú)運(yùn)行時,其__name__的值為'__main__',故可以把模塊源碼文件的測試代碼寫在相應(yīng)的測試判斷中,以保證只有單獨(dú)運(yùn)行模塊時才會運(yùn)行測試代碼。3426.?編寫模塊文檔字符串在程序源碼中,可以在特定的地方添加描述性文字,以說明包、模塊、函數(shù)、類、類方法的相關(guān)信息。在函數(shù)的第一個邏輯行的字符串稱為函數(shù)的文檔字符串。函數(shù)的文檔字符串用于提供有關(guān)函數(shù)的幫助信息。文檔字符串一般遵循下列慣例:文檔字符串是一個多行字符串;首行以大寫字母開始,以句號結(jié)尾;第二行是空行;從第三行開始是詳細(xì)的描述。343用戶可以使用以下三種方法抽取函數(shù)的文檔字符串幫助信息。(1)使用內(nèi)置函數(shù)help。(2)使用函數(shù)的特殊屬性:函數(shù)名.__doc__。(3)使用第三方自動化工具抽取文檔字符串信息,以形成幫助文檔。3447.?按字節(jié)編譯的“.pyc”文件在導(dǎo)入模塊時,Python解釋器為提高程序的啟動速度,會在與模塊文件同一目錄的__pycache__子目錄下生成“.pyc”文件。“.pyc”文件是經(jīng)過編譯后的字節(jié)碼,這樣下次導(dǎo)入時如果模塊源碼“.py”文件沒有修改(通過比較兩者的時間戳),則直接導(dǎo)入“.pyc”文件,從而提高編程效率。按字節(jié)編譯的“.pyc”文件在導(dǎo)入時由Python解釋器自動完成,無須手動編譯。345五、導(dǎo)入模塊和使用模塊1.?通過import語句導(dǎo)入模塊使用import語句可以導(dǎo)入模塊。其基本形式如下。import模塊名
#導(dǎo)入模塊import模塊1,模塊2,…,模塊n
#導(dǎo)入多個模塊import模塊名as模塊別名
#導(dǎo)入模塊并使用別名其中,模塊名是要導(dǎo)入的模塊的名稱。注意:模塊名區(qū)分大小寫。3462.?通過內(nèi)置函數(shù)__import__導(dǎo)入模塊使用內(nèi)置函數(shù)__import__可以動態(tài)導(dǎo)入模塊。其基本形式如下。_m=__import__(name)
#將模塊name導(dǎo)入_m內(nèi)置函數(shù)__import__有較大的靈活性,如要導(dǎo)入的模塊name可以是計(jì)算的結(jié)果字符串,但一般不直接使用。事實(shí)上,import語句在內(nèi)部調(diào)用該函數(shù)。3.?使用模塊一般在Python源程序的開始位置導(dǎo)入其他模塊。在導(dǎo)入模塊后,可以使用全限定名稱訪問模塊中定義的成員,即模塊名.函數(shù)名/變量名347六、導(dǎo)入模塊中的成員Python使用from...import語句直接導(dǎo)入模塊中的成員。其基本形式如下。from模塊名import成員名
#導(dǎo)入模塊中的具體成員成員名
#直接調(diào)用如果希望同時導(dǎo)入一個模塊中的多個成員,可以采用以下形式。from模塊名import成員名1,成員名2,…,成員名n如果希望同時導(dǎo)入一個模塊中的所有成員,則可以采用以下形式。from模塊名import*348注意:雖然from...import語句可以簡化代碼,但應(yīng)避免使用,因?yàn)檫@樣可能導(dǎo)致名稱沖突(如導(dǎo)入多個模塊時,多個模塊中可能存在同一個名稱的函數(shù)),且導(dǎo)致程序的可讀性差(如導(dǎo)入多個模塊時,無法準(zhǔn)確確定某個名稱的函數(shù)具體屬于哪一個模塊)。349七、重新加載模塊importlib模塊中的reload函數(shù)用于重新加載之前導(dǎo)入過的模塊,一般用于交互式執(zhí)行Python代碼不退出解釋器的情況,重新加載已更改的Python模塊。需要注意的是,重新加載內(nèi)存中不存在的模塊(未導(dǎo)入過)會導(dǎo)致運(yùn)行錯誤。350任務(wù)2
包的導(dǎo)入和使用3511.?了解包的基本概念。2.?掌握包的創(chuàng)建、導(dǎo)入和使用方法。3.?能正確地從包中導(dǎo)入模塊,實(shí)例化函數(shù)并輸出對象地址。任務(wù)目標(biāo)352一、Python的包Python模塊是“.py”文件,而包是文件夾。通常,只要文件夾中包含一個特殊的文件“__init__.py”,Python解釋器就將該文件夾作為包,其中的模塊文件(“.py”文件)屬于包中的模塊。特殊文件“__init__.py”可以為空,也可以包含屬于包的代碼,當(dāng)導(dǎo)入包或該包中的模塊時執(zhí)行“__init__.py”。包可以包含子包,沒有層次限制。使用包可以有效避免名稱空間沖突。相關(guān)知識353354二、創(chuàng)建包包和模塊組成的層次組織結(jié)構(gòu)對應(yīng)文件夾和模塊文件。創(chuàng)建包,首先需要在指定目錄中創(chuàng)建對應(yīng)包名的目錄,然后在該目錄下創(chuàng)建一個特殊文件“__init__.py”,最后在該目錄下創(chuàng)建模塊文件。355三、包的導(dǎo)入和使用在使用import語句導(dǎo)入包中的模塊時需要指定對應(yīng)的包名。其基本形式如下。import[包名1.[包名2…]].模塊名#導(dǎo)入包中模塊其中,包名是模塊的上層組織包的名稱。注意:包名和模塊名區(qū)分大小寫。在導(dǎo)入包中的模塊后,可以使用全限定名稱訪問包中模塊定義的成員。其基本形式如下。[包名1.[包名2…]].模塊
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)衛(wèi)石匠施工合同
- 2025年度汽車銷售合同新能源汽車代理2篇
- 2025年度年度知名教育機(jī)構(gòu)兼職教師服務(wù)合同3篇
- 2025年度酒店客房部客房清潔工具采購合同3篇
- 2025年度綜合安防系統(tǒng)運(yùn)維人員勞動合同范本3篇
- 關(guān)于2025年度消防設(shè)施維護(hù)保養(yǎng)合同匯編3篇
- 二零二五年度酒店客房預(yù)訂渠道拓展與傭金分配合同3篇
- 2025年度互聯(lián)網(wǎng)企業(yè)高級管理人員勞動合同模板2篇
- 二零二五年度企業(yè)員工合同模板匯編:試用期管理篇3篇
- 農(nóng)村建房施工安全責(zé)任主體確認(rèn)與責(zé)任劃分合同(2025)3篇
- 中外美術(shù)評析與欣賞智慧樹知到期末考試答案章節(jié)答案2024年湖南大學(xué)
- 事業(yè)單位考試《綜合知識和能力測試》試卷
- 福利住房與購房補(bǔ)貼制度
- 康師傅烏龍茗茶營銷策劃書
- 【川教版】《生命 生態(tài) 安全》四上第13課《預(yù)防凍瘡》課件
- 工廠籌建方案
- UPVC管道安裝施工方法
- 河南省鄭州高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)2023-2024學(xué)年三年級上學(xué)期1月期末科學(xué)試題
- 女裝行業(yè)退貨率分析
- 計(jì)算機(jī)基礎(chǔ)理論-進(jìn)制的概念及換算試題及答案
- 森林草原防火工作培訓(xùn)課件
評論
0/150
提交評論