Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)4、5 函數(shù)與異常處理、面向?qū)ο缶幊蘝第1頁
Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)4、5 函數(shù)與異常處理、面向?qū)ο缶幊蘝第2頁
Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)4、5 函數(shù)與異常處理、面向?qū)ο缶幊蘝第3頁
Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)4、5 函數(shù)與異常處理、面向?qū)ο缶幊蘝第4頁
Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)4、5 函數(shù)與異常處理、面向?qū)ο缶幊蘝第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

函數(shù)與異常處理實(shí)驗(yàn)四課程學(xué)習(xí)目標(biāo)掌握函數(shù)的定義和調(diào)用掌握異常處理的方法和語法4.1函數(shù)的創(chuàng)建和調(diào)用除了可以直接使用的標(biāo)準(zhǔn)函數(shù)如input()、print()外,Python還支持自定義函數(shù)。即通過將一段有規(guī)律的、重復(fù)的代碼定義為函數(shù),來達(dá)到一次編寫、多次調(diào)用的目的。創(chuàng)建函數(shù)的語法格式:deffunctionname([parameterlist]):

[‘‘‘comments’’’]

[functionbody]【例4.1】定義一個(gè)過濾危險(xiǎn)字符的函數(shù)filterchar()。運(yùn)行上面的代碼,將不顯示任何內(nèi)容,也不會(huì)拋出異常,因?yàn)閒ilterchar()函數(shù)還沒有被調(diào)用。調(diào)用函數(shù)的基本語法格式:function_name([parametersvalue])調(diào)用例4.1中創(chuàng)建的filterchar()函數(shù):about='我是一名程序員,喜歡看黑客方面的圖書,想研究一下Trojan。'filterchar(about)調(diào)用filterchar()函數(shù)后,顯示如下結(jié)果:我是一名程序員,喜歡看@_@方面的圖書,想研究一下@_@。4.2參數(shù)傳遞什么是函數(shù)的參數(shù)?deffun_bmi(person,height,weight)1形式參數(shù)和實(shí)際參數(shù)區(qū)別:(1)通過作用理解:形式參數(shù):在定義函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)為“形式參數(shù)”;實(shí)際參數(shù):在調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)為“實(shí)際參數(shù)”?!纠?.2】

定義一個(gè)名稱為demo的函數(shù),然后為demo()函數(shù)傳遞一個(gè)字符串類型的變量作為參數(shù)(代表值傳遞),并在函數(shù)調(diào)用前后分別輸出該字符串變量,再為demo()函數(shù)傳遞列表類型的變量作為參數(shù)(代表引用傳遞),并在函數(shù)調(diào)用前后分別輸出該列表。(2)通過比喻理解函數(shù)定義時(shí)參數(shù)列表中的參數(shù)就是形式參數(shù),而函數(shù)調(diào)用時(shí)傳遞進(jìn)來的參數(shù)就是實(shí)際參數(shù)。2位置參數(shù)位置參數(shù)是函數(shù)定義和調(diào)用中的一種參數(shù)類型,調(diào)用時(shí)的數(shù)量和位置必須和定義時(shí)是一樣的3關(guān)鍵字參數(shù)指使用形式參數(shù)的名字來確定輸入的參數(shù)值。通過該方式指定實(shí)際參數(shù)時(shí),不再需要與形式參數(shù)的位置完全一致。只要將參數(shù)名正確書寫即可?!纠?.3】根據(jù)身高和體重計(jì)算BMI指數(shù)4默認(rèn)參數(shù)調(diào)用函數(shù)時(shí),如果沒有指定某個(gè)參數(shù)將拋出異常,可以為參數(shù)設(shè)置默認(rèn)值,即在定義函數(shù)時(shí),直接指定形式參數(shù)的默認(rèn)值。當(dāng)沒有傳入?yún)?shù)時(shí),則直接使用定義函數(shù)時(shí)設(shè)置的默認(rèn)值?!纠?.4】修改上述實(shí)例中定義的根據(jù)身高、體重計(jì)算BMI指數(shù)的函數(shù)fun_bmi(),為其第三個(gè)參數(shù)指定默認(rèn)值。5不定長(zhǎng)參數(shù)在Python中,存在參數(shù)不能確定的情況,這時(shí)就需要用到不定長(zhǎng)參數(shù)。定義可變參數(shù)有兩種形式:一種是*parameter,另一種是**parameter。不定長(zhǎng)參數(shù)須在固定參數(shù)后面。(1)不定長(zhǎng)位置參數(shù):*parameter,當(dāng)函數(shù)調(diào)用時(shí)傳入比預(yù)期更多的位置參數(shù)時(shí),這些額外的位置參數(shù)會(huì)被收集到一個(gè)元組(tuple)中。(2)不定長(zhǎng)關(guān)鍵字參數(shù):**parameter,這些參數(shù)以鍵值對(duì)的形式傳遞,并被收集到一個(gè)字典中。4.3返回值函數(shù)返回值的作用就是將函數(shù)的處理結(jié)果返回給調(diào)用它的程序,使用return語句為函數(shù)指定返回值,該返回值可以是任意類型,無論return語句出現(xiàn)在函數(shù)的什么位置,只要得到執(zhí)行,就會(huì)立即結(jié)束函數(shù)的執(zhí)行。return語句的語法格式如下:

returnvalue

#value可選參數(shù)用于指定要返回的值可以返回一個(gè)值也可以返回多個(gè)值

#說明當(dāng)函數(shù)中沒有return語句或者省略了return語句的參數(shù)時(shí)將返回None【例4.7】模擬結(jié)賬功能———計(jì)算實(shí)付金額4.4變量的作用域變量的作用域是指程序代碼能夠訪問該變量的區(qū)域。如果超出該區(qū)域,再訪問時(shí)就會(huì)出現(xiàn)錯(cuò)誤。根據(jù)變量的有效范圍將變量分為“全局變量”和“局部變量”。1局部變量指在函數(shù)內(nèi)部定義并使用的變量,只在函數(shù)內(nèi)部有效。如果在函數(shù)外部使用函數(shù)內(nèi)部定義的變量,就會(huì)出現(xiàn)拋出NameError異常?!纠?.8】定義一個(gè)名為f_demo的函數(shù),在該函數(shù)內(nèi)部定義變量message(稱為局部變量),并為其賦值,然后輸出該變量,最后在函數(shù)體外部再次輸出message變量。運(yùn)行上面的代碼將顯示異常,因?yàn)閙essage定義在函數(shù)體內(nèi),該變量只能在函數(shù)體中使用,在外部不能使用該變量。2全局變量全局變量為能夠作用于函數(shù)內(nèi)外的變量,主要有以下兩種情況:(1)變量在函數(shù)外定義,那么不僅在函數(shù)外可以訪問到,在函數(shù)內(nèi)也可以訪問到?!纠?.9】定義一個(gè)全局變量message,然后定義一個(gè)函數(shù),在該函數(shù)內(nèi)輸出全局變量message的值。(2)在函數(shù)體內(nèi)定義,并且使用global關(guān)鍵字修飾后,該變量也就變?yōu)槿肿兞?。在函?shù)體外也可以訪問到該變量,并且在函數(shù)體內(nèi)還可以對(duì)其進(jìn)行修改?!纠?.10】定義兩個(gè)同名的全局變量和局部變量,并輸出它們的值。4.5匿名函數(shù)(lambda)匿名函數(shù)是指沒有名字的函數(shù),應(yīng)用在需要一個(gè)函數(shù)但是又不想費(fèi)神去命名這個(gè)函數(shù)的場(chǎng)合。使用lambda表達(dá)式創(chuàng)建匿名函數(shù),其語法格式如下:result=lambda[arg1[,arg2,....,argn]]:expression[arg1[,arg2,……,argn]:可選參數(shù),用于指定要傳遞的參數(shù)列表,多個(gè)參數(shù)間使用逗號(hào)“,”分隔。expression:必選參數(shù),用于指定一個(gè)實(shí)現(xiàn)具體功能的表達(dá)式。是表達(dá)式只能有一個(gè),不能包含多行代碼或復(fù)合語句?!纠?.11】應(yīng)用lambda實(shí)現(xiàn)對(duì)爬取到的秒殺商品信息進(jìn)行排序。4.6異常處理在程序運(yùn)行過程中,經(jīng)常會(huì)遇到各種各樣的錯(cuò)誤,這些錯(cuò)誤統(tǒng)稱為“異?!保挥捎陂_發(fā)者將關(guān)鍵字輸錯(cuò)導(dǎo)致的。會(huì)產(chǎn)生:SyntaxError:invalidsyntax(無效的語法);與使用者的錯(cuò)誤操作有關(guān),如應(yīng)該輸入數(shù)字,用戶卻輸入文本字符;常見的異常:異常描述NameError嘗試訪問一個(gè)沒有聲明的變量引發(fā)的錯(cuò)誤IndexError索引超出序列范圍引發(fā)的錯(cuò)誤IndentationError縮進(jìn)錯(cuò)誤ValueError傳入的值錯(cuò)誤KeyError請(qǐng)求一個(gè)不存在的字典關(guān)鍵字引發(fā)的錯(cuò)誤IOError輸入輸出錯(cuò)誤(如要讀取的文件不存在)ImportError當(dāng)import語句無法找到模塊或from無法在模塊中找到相應(yīng)的名稱時(shí)引發(fā)的錯(cuò)誤AttributeError嘗試訪問未知的對(duì)象屬性引發(fā)的錯(cuò)誤TypeError類型不合適引發(fā)的錯(cuò)誤MemoryError內(nèi)存不足ZeroDivisionError除數(shù)為0引發(fā)的錯(cuò)誤try和except語句塊用于異常處理。try塊包含可能引發(fā)異常的代碼,而except塊則包含處理這些異常的代碼。如果try塊中的代碼引發(fā)了異常,程序會(huì)跳過剩余的代碼,轉(zhuǎn)而執(zhí)行相應(yīng)的except塊?!纠?.12】異常處理舉例本節(jié)實(shí)驗(yàn)作業(yè)用戶輸入數(shù)據(jù)個(gè)數(shù)不確定,全部放入列表中。使用eval將輸入數(shù)據(jù)轉(zhuǎn)換為數(shù)值型,如果不是輸入數(shù)值型,可以使用try…except來處理,并提醒用戶。寫一個(gè)不定長(zhǎng)參數(shù)的求和函數(shù),通過該求和函數(shù)返回結(jié)果。調(diào)用函數(shù)顯式打印出來。具體操作請(qǐng)查看視頻教程面向?qū)ο缶幊虒?shí)驗(yàn)五課程學(xué)習(xí)目標(biāo)了解面向?qū)ο蟮幕靖拍钊筇攸c(diǎn)了解面向?qū)ο缶幊潭x與使用5.1面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊蹋∣bject-OrientedProgramming,簡(jiǎn)稱OOP)是一種程序設(shè)計(jì)的范式,它使用對(duì)象(通常是類的實(shí)例)來組織代碼和數(shù)據(jù)。面向?qū)ο缶幊淌且环N以對(duì)象為中心的思想,其中對(duì)象包含數(shù)據(jù)(屬性)和方法(函數(shù)),這些對(duì)象通過相互之間的交互來完成任務(wù)。什么是面向過程?簡(jiǎn)單來講面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。什么是面向?qū)ο螅棵嫦驅(qū)ο笫前褬?gòu)成問題的事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問題的步驟中的行為。#面向過程:打開冰箱->存儲(chǔ)大象->關(guān)上冰箱對(duì)于面向過程思想,強(qiáng)調(diào)的是過程(動(dòng)作)#面向?qū)ο螅簩?duì)于面向?qū)ο笏枷耄瑥?qiáng)調(diào)的是對(duì)象(實(shí)體)冰箱打開->冰箱存儲(chǔ)大象->冰箱關(guān)上1對(duì)象對(duì)象是一個(gè)抽象概念,可以表示任意存在的事物。在Python中,一切都是對(duì)象,不僅具體的事物稱為對(duì)象,字符串、函數(shù)等也是對(duì)象。通常將對(duì)象劃分2個(gè)部分。即靜態(tài)部分與動(dòng)態(tài)部分。以人為對(duì)象為例:人的性別屬于靜態(tài)屬性,人跑步則是屬于動(dòng)態(tài)行為。屬性對(duì)象行為,即對(duì)象執(zhí)行的動(dòng)作2類類是封裝對(duì)象的屬性與行為的載體,也就是說具有相同屬性和行為的一類實(shí)體被稱為類。3封裝,繼承,多態(tài)封裝是面向?qū)ο缶幊痰暮诵?,將?duì)象的屬性與行為封裝起來,載體就是類;封裝思想保證了類內(nèi)部數(shù)據(jù)的完整性,使用該類的用戶不能直接看到類中的數(shù)據(jù)結(jié)構(gòu),只能執(zhí)行公開的數(shù)據(jù),避免了對(duì)內(nèi)部數(shù)據(jù)的影響。繼承是實(shí)現(xiàn)重復(fù)利用的重要手段,子類通過繼承復(fù)用了父類的屬性和行為的同時(shí)又添加了子類特有的屬性和行為。多態(tài)是指相同的函數(shù)與方法在不同的類中有不同的表現(xiàn)形式。多態(tài)是一種使用對(duì)象的方式,子類重寫父類方法,調(diào)用不同子類對(duì)象的相同父類方法,可以產(chǎn)生不同的執(zhí)行結(jié)果。5.2類的定義和使用1定義類在Python中,使用class關(guān)鍵字來定義類,其基本結(jié)構(gòu)如下:classClassName:#定義一個(gè)類 pass2創(chuàng)建類實(shí)例通過類可以創(chuàng)建對(duì)象。對(duì)象是類的一個(gè)實(shí)例,通過調(diào)用類的構(gòu)造方法__init__來進(jìn)行初始化。構(gòu)造方法的第一個(gè)參數(shù)通常是self,表示實(shí)例本身.classDog:def__init__(self,name,age):=nameself.age=age#創(chuàng)建類的實(shí)例my_dog=Dog("Buddy",3)3屬性類可以包含屬性,它們是對(duì)象的特征或狀態(tài)。屬性是通過self關(guān)鍵字綁定到對(duì)象的。classDog:def__init__(self,name,age):=name#實(shí)例屬性self.age=age4方法方法是類中定義的函數(shù),用于執(zhí)行特定的操作。方法的第一個(gè)參數(shù)通常是self,用于引用對(duì)象本身。5封裝封裝是將對(duì)象的狀態(tài)和行為封裝在一起,隱藏內(nèi)部實(shí)現(xiàn)的細(xì)節(jié)。封裝通常是通過使用私有(private)和受保護(hù)(protected)成員來實(shí)現(xiàn)的。私有成員:在Python中,約定以雙下劃線(__)開始的成員(屬性和方法)為私有。它們只能在類的內(nèi)部被訪問。受保護(hù)成員:以單下劃線(_)開始的成員被視為受保護(hù),它們可以被子類訪問,但是約定上不應(yīng)該被外部直接訪問。例16繼承繼承是面向?qū)ο缶幊讨械囊粋€(gè)核心概念。繼承允許一個(gè)類(稱為子類或

溫馨提示

  • 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)論