Python財經(jīng)應用-編程基礎、數(shù)據(jù)分析與可視化課件 第2章-Python程序設計基礎-2.4面向?qū)ο蟪绦蛟O計_第1頁
Python財經(jīng)應用-編程基礎、數(shù)據(jù)分析與可視化課件 第2章-Python程序設計基礎-2.4面向?qū)ο蟪绦蛟O計_第2頁
Python財經(jīng)應用-編程基礎、數(shù)據(jù)分析與可視化課件 第2章-Python程序設計基礎-2.4面向?qū)ο蟪绦蛟O計_第3頁
Python財經(jīng)應用-編程基礎、數(shù)據(jù)分析與可視化課件 第2章-Python程序設計基礎-2.4面向?qū)ο蟪绦蛟O計_第4頁
Python財經(jīng)應用-編程基礎、數(shù)據(jù)分析與可視化課件 第2章-Python程序設計基礎-2.4面向?qū)ο蟪绦蛟O計_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Python財經(jīng)應用:編程基礎、數(shù)據(jù)分析與可視化第二章Python程序設計基礎中國農(nóng)業(yè)大學李輝01

程序基本流程控制02

典型序列數(shù)據(jù)結構03

函數(shù)與函數(shù)式編程04

面向?qū)ο蟪绦蛟O計01

程序基本流程控制02

典型序列數(shù)據(jù)結構03

函數(shù)與函數(shù)式編程04

面向?qū)ο蟪绦蛟O計2.4面向?qū)ο蟪绦蛟O計第二章Python程序設計基礎面向?qū)ο蟪绦蛟O計Python采用了面向?qū)ο蟪绦蛟O計的思想,以類和對象為基礎,將數(shù)據(jù)和操作封裝成一個類,通過類的對象進行數(shù)據(jù)操作。面向?qū)ο蟪绦蛟O計——類和對象類的格式與創(chuàng)建對象:類由類聲明和類體組成,而類體又由成員變量和成員方法組成,其一般形式如下:在類聲明中,class是聲明類的關鍵字,表示類聲明的開始,類聲明后面跟著類名,按習慣類名要用大寫字母開頭,并且類名不能用阿拉伯數(shù)字開頭。在類體中定義的成員方法與在類外定義的函數(shù)一般形式是相同的。也就是說,通常把定義在類體中的函數(shù)稱為方法。類中的self在調(diào)用時代表類的實例。class類名:

成員變量 def成員方法(self)面向?qū)ο蟪绦蛟O計——類和對象創(chuàng)建對象:類在使用時,必須創(chuàng)建類的對象,再通過類的對象來操作類中的成員變量和成員方法。創(chuàng)建類對象的格式為:對象名=類名()創(chuàng)建對象:調(diào)用類的方法時,需要通過類對象調(diào)用,其調(diào)用格式如下:對象名.方法名(self)面向?qū)ο蟪绦蛟O計——類和對象類的公有成員和私有成員:在Python程序中定義的成員變量和方法默認都是公有成員,類之外的任何代碼都可以隨意訪問這些成員。如果在成員變量和方法名之前加上兩個下劃線“__”作前綴,則該變量或方法就是類的私有成員。私有成員只能在類的內(nèi)部調(diào)用,類外的任何代碼都無法訪問這些成員。面向?qū)ο蟪绦蛟O計——類和對象類的構造方法:在Python中,類的構造方法為__init__(),其中方法名開始和結束的下劃線是雙下劃線。構造方法屬于對象,每個對象都有自己的構造方法。如果一個類在程序中沒有定義__init__()方法,則系統(tǒng)會自動建立一個方法體為空的__init__()方法。如果一個類的構造方法帶有參數(shù),則在創(chuàng)建類對象時需要賦實參給對象。在程序運行時,構造方法在創(chuàng)建對象時由系統(tǒng)自動調(diào)用,不需要用調(diào)用方法的語句顯式調(diào)用。面向?qū)ο蟪绦蛟O計——類和對象析構方法:在Python中,析構方法為__del__(),其中開始和結束的下劃線是雙下劃線。析構方法用于釋放對象所占用的資源,在Python系統(tǒng)銷毀對象之前自動執(zhí)行。析構方法屬于對象,每個對象都有自己的析構方法。如果類中沒有定義__del__()方法,則系統(tǒng)會自動提供默認的析構方法。面向?qū)ο蟪绦蛟O計——類和對象【例2-30】類的私有方法的定義與使用。

classInterviewer(object):def__init__(self):self.wage=0defask_question(self):print('asksomequestion!')def__talk_wage(self):print('Calculatewage!')deftalk_wage(self):ifself.wage>20000:print('toohigh!')else:self.__talk_wage()print('welcometojoinus!')me=Interviewer()me.ask_question()#me.__talk_wage()me.wage=30000me.talk_wage()print('-'*20)me.wage=15000me.talk_wage()面向?qū)ο蟪绦蛟O計——類和對象運行結果如下:

asksomequestion!toohigh!--------------------Calculatewage!welcometojoinus!在上面的類中,ask_question()方法是普通的方法,在類的外部可以直接調(diào)用;__talk_wage()方法是私有方法,只能在類的內(nèi)部使用,如果在外部寫調(diào)用的代碼則報錯。要在外部調(diào)用__talk_wage(),只能間接的通過普通方法talk_wage()來調(diào)用。面向?qū)ο蟪绦蛟O計——類的繼承類的繼承是為代碼復用而設計的,是面向?qū)ο蟪绦蛟O計的重要特征之一。當設計一個新類時,如果可以繼承一個已有的類,無疑會大幅度減少開發(fā)工作量。在繼承關系中,已有的類稱為父類或基類,新設計的類稱為子類或派生類。派生類可以繼承父類的公有成員,但不能繼承其私有成員。在繼承中,父類的構造方法__init__()不會自動調(diào)用,如果在子類中需要調(diào)用父類的方法,可以使用內(nèi)置函數(shù)super()或通過“父類名.方法名()”的方式實現(xiàn)。面向?qū)ο蟪绦蛟O計——類的繼承類的單繼承:類的單繼承的一般形式為:class子類名(父類名):

子類的類體語句類的多繼承:Python支持多繼承,多繼承的一般形式為:class子類名(父類名1,父類名2,....,父類n):子類的類體語句Python在多繼承時,如果這些父類中有相同的方法名,面在子類中使用時沒有指定父類名,則Python系統(tǒng)將從左往右按順序搜索。面向?qū)ο蟪绦蛟O計——類的繼承【例2-31】創(chuàng)建人(Person)類,再創(chuàng)建兩個派生類。要求如下:在人基類中,包括類屬性name(記錄姓名)和方法work(輸出現(xiàn)在所做的工作)。創(chuàng)建一個派生類Student,在該類的__init__()方法中輸出“我是學生”,并且重寫work()方法,輸出所做的工作。創(chuàng)建第二個派生類Teacher,在該類的__init__()方法中輸出“我是老師”,并且改變類屬性name的值,然后再重寫work()方法,輸出所做的工作。分別創(chuàng)建派生類的實例,然后調(diào)用各自的work()方法,并且輸出類屬性的值。面向?qū)ο蟪绦蛟O計——類的繼承

classPerson: #人類(基類)name='匿名'#姓名defwork(self):print('我在工作中……')classStudent(Person):#定義學生類(派生類)def__init__(self):print('我是學生')defwork(self):print('我在學習中……')classTeacher(Person):#定義老師類(派生類)def__init__(self):print('\n我是老師')P='無名'student=Student()#創(chuàng)建類的實例(學生)print()student.work()#調(diào)用派生類的work()方法teacher=Teacher()#創(chuàng)建類的實例(老師)teacher.work()#調(diào)用基類的work()方法print()#輸出基類的類屬性的值面向?qū)ο蟪绦蛟O計——類的繼承運行結果如下:

我是學生匿名我在學習中……我是老師我在工作中……無名函數(shù)與函數(shù)式編程——函數(shù)的定義與調(diào)用函數(shù)調(diào)用:調(diào)用函數(shù)也就是執(zhí)行函數(shù)。在Python中,直接使用函數(shù)名調(diào)用函數(shù)。如果定義的函數(shù)包含有參數(shù),則調(diào)用函數(shù)時也必須使用參數(shù)。調(diào)用函數(shù)的語法如下:說明:function_name:函數(shù)名稱,要調(diào)用的函數(shù)名稱,必須是已經(jīng)定義好的。arguments:可選參數(shù),用于指定各個參數(shù)的值。如果需要傳遞多個參數(shù)值,則各個參數(shù)值間使用逗號“,”分隔;如果該函數(shù)沒有參數(shù),則直接寫一對小括號即可。function_name(arguments)函數(shù)與函數(shù)式編程——函數(shù)的定義與調(diào)用函數(shù)的返回值:在Python中,可以在函數(shù)體內(nèi)使用return語句為函數(shù)指定返回值。該返回值可以是任意類型,并且無論return語句出現(xiàn)在函數(shù)的什么位置,只要得到執(zhí)行,就會直接結束函數(shù)的執(zhí)行。return語句的語法如下:說明:value為可選參數(shù),用于指定要返回的值,可以返回一個值,也可以返回多個值。returnvalue函數(shù)與函數(shù)式編程——函數(shù)的定義與調(diào)用【例2-24】自定義函數(shù)名稱為fun_area的函數(shù),用于計算矩形的面積,該函數(shù)包括兩個參數(shù),分別為矩形的長和寬,返回值為的矩形面積。

#計算矩形面積的函數(shù)deffun_area(width,height):ifstr(width).isdigit()andstr(height).isdigit():#驗證數(shù)據(jù)是否合法area=width*height#計算矩形面積else:area=0returnarea#返回矩形的面積w=20#矩形的長h=15#矩形的寬area=fun_area(w,h)#調(diào)用函數(shù)print(area)運行結果如下:

300函數(shù)與函數(shù)式編程——函數(shù)參數(shù)類型在使用函數(shù)時,經(jīng)常會用到形式參數(shù)和實際參數(shù),兩者都叫作參數(shù),二者之間的區(qū)別將先通過形式參數(shù)與實際參數(shù)的作用來進行講解。形參即形式參數(shù),在使用def定義函數(shù)時,函數(shù)名后面的括號里的變量稱作形式參數(shù)。在調(diào)用函數(shù)時提供的值或者變量稱作實際參數(shù),實際參數(shù)簡稱實參。定義函數(shù)時不需要聲明形參的數(shù)據(jù)類型,Python解釋器會根據(jù)實參的類型自動推斷形參的類型。函數(shù)是可以傳遞參數(shù)的,當然也可以不傳遞參數(shù)。同樣,函數(shù)可以有返回值,也可以沒有返回值。根據(jù)實際參數(shù)的類型不同,可以分為將實際參數(shù)的值傳遞給形式參數(shù),和將實際參數(shù)的引用傳遞給形式參數(shù)兩種情況。其中,當實際參數(shù)為不可變對象時,進行的是值傳遞;當實際參數(shù)為可變對象時,進行的是引用傳遞。實際上,值傳遞和引用傳遞的基本區(qū)別就是,進行值傳遞后,改變形式參數(shù)的值,實際參數(shù)的值不變;而在進行引用傳遞后,改變形式參數(shù)的值,實際參數(shù)的值也一同改變。函數(shù)與函數(shù)式編程——函數(shù)參數(shù)類型默認參數(shù)傳遞Python支持默認值參數(shù),即在定義函數(shù)時可以為形參設置默認值。調(diào)用帶有默認值參數(shù)的函數(shù)時,如果沒有給設置默認值的形參傳值,則函數(shù)會直接使用默認值。也可以通過傳遞實參替換默認值。

#定義函數(shù)defuser_info(name,age,gender='女'):print(f"您的名字是{name},年齡是{age},性別是{gender}")#調(diào)用函數(shù)user_info('Tom',20)user_info('Jack',18,'男')def函數(shù)名(…,形參名=默認值):函數(shù)體【例2-25】自定義函數(shù)user_info,定義時設置默認參數(shù),調(diào)用時驗證其功能。函數(shù)與函數(shù)式編程——函數(shù)參數(shù)類型運行結果如下:定義函數(shù)時,為形式參數(shù)設置默認值要牢記一點:默認參數(shù)必須指向不可變對象。若使用可變對象作為函數(shù)參數(shù)的默認值時,多次調(diào)用可能會導致意料之外的情況。

您的名字是Tom,年齡是20,性別是女您的名字是Jack,年齡是18,性別是男函數(shù)與函數(shù)式編程——函數(shù)參數(shù)類型未知參數(shù)個數(shù)(可變)傳遞對于某些函數(shù),我們不知道傳進來多少個參數(shù),只知道對這些參數(shù)進行怎樣的處理。Python允許創(chuàng)造這樣的函數(shù),即未知參數(shù)個數(shù)的傳遞機制,只需要在參數(shù)前面加個*就可以了。通過*arg和**kwargs這兩個特殊語法可以實現(xiàn)可變長參數(shù):*arg:元組變長參數(shù),可以以元組形式接收不定長度的實參。**kwargs:字典變長參數(shù),可以以字典形式接收不定長度的鍵值對。函數(shù)與函數(shù)式編程——函數(shù)參數(shù)類型

defget_score(*names):result=[]fornameinnames:score=std_sc.get(name,-1)result.append((name,score))returnresultstd_sc={'Merry':95,'Jack':76,'Rose':88,'Xinyi':65}print(get_score('Merry'))print(get_score('Jack','Rose'))print(get_score('Merry','Xinyi','Jack'))【例2-26】自定義函數(shù)get_score,利用可變長參數(shù),根據(jù)姓名同時查詢多人的成績。函數(shù)與函數(shù)式編程——函數(shù)參數(shù)類型運行結果如下:定義函數(shù)時,為形式參數(shù)設置默認值要牢記一點:默認參數(shù)必須指向不可變對象。若使用可變對象作為函數(shù)參數(shù)的默認值時,多次調(diào)用可能會導致意料之外的情況。

[('Merry',95)][('Jack',76),('Rose',88)][('Merry',95),('Xinyi',65),('Jack',76)]函數(shù)與函數(shù)式編程——函數(shù)參數(shù)類型關鍵字參數(shù)傳遞:關鍵字參數(shù):使用形式參數(shù)的名字來確定輸入的參數(shù)值。通過該方式指定實際參數(shù)時,不再需要與形式參數(shù)的位置完全一致,只要將參數(shù)名寫正確即可。這樣可以避免用戶需要牢記參數(shù)位置的麻煩,使得函數(shù)的調(diào)用和參數(shù)傳遞更加靈活方便,即可以讓函數(shù)更加清晰、容易使用,同時也清除了參數(shù)的順序需求。調(diào)用函數(shù)時,可以通過“形參名=值”的形式傳遞參數(shù),稱之為關鍵字參數(shù)。與位置參數(shù)相比,關鍵字參數(shù)可以通過參數(shù)名明確指定為哪個參數(shù)傳值,因此參數(shù)的順序可以與函數(shù)定義中的不一致。使用關鍵字參數(shù)傳參時,必須正確引用函數(shù)定義中的形參名稱。函數(shù)與函數(shù)式編程——函數(shù)參數(shù)類型

defuser_info(name,age,gender):print(f"您的名字是{name},年齡是{age},性別是{gender}")#函數(shù)調(diào)用user_info('Tom',age=20,gender='女')user_info('Jack',gender='男',age=18)【例2-27】定義一個函數(shù),可以通過關鍵字傳遞實際參數(shù)。

您的名字是Tom,年齡是20,性別是女您的名字是Jack,年齡是18,性別是男運行結果如下:當位置參數(shù)與關鍵字參數(shù)混用時,位置參數(shù)必須在關鍵字參數(shù)的前面,關鍵字參數(shù)之間可以不區(qū)分先后順序。本章主要介紹了程序三種基本結構以及輔助控制語句等內(nèi)容,主要涉及如下知識點:程序從主體上說都是順序的,一條語句執(zhí)行完之

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論