




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第1章Python概述主講人:***15-10月-23Python數(shù)據(jù)分析與數(shù)據(jù)挖掘目錄contentsPython簡介&特點和應(yīng)用領(lǐng)域0102Python開發(fā)環(huán)境的搭建03Python運行原理及編寫規(guī)范Python簡介&特點和應(yīng)用領(lǐng)域011.1Python簡介姓名Python出生地荷蘭國家數(shù)學(xué)和計算機(jī)科學(xué)研究所成長地Python社區(qū)出生年月1989.12偶像ABC語言業(yè)界稱號膠水語言父親GuidoVanRossum老師C語言信念讓用戶感覺更好免費開源:方便地閱讀它的源代碼、對源代碼進(jìn)行改進(jìn)與應(yīng)用簡單易用:像閱讀英語一樣讀懂代碼提供了豐富的庫:提供了廣泛的標(biāo)準(zhǔn)庫和許多其他高質(zhì)量的庫規(guī)范的代碼風(fēng)格:《PythonEnhancementProposal#8》代碼風(fēng)格指南運行效率高:底層以及標(biāo)準(zhǔn)庫等均是C編寫的;避開了編譯、鏈接等障礙1.2
python特點和應(yīng)用領(lǐng)域易于移植、部署:支持所有的主流操作系統(tǒng),并且部署方便可擴(kuò)展、可嵌入:C或者C++進(jìn)行擴(kuò)展、嵌入1.2
python特點和應(yīng)用領(lǐng)域目前Python主要應(yīng)用于Web開發(fā)、數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、編寫網(wǎng)絡(luò)爬蟲進(jìn)行數(shù)據(jù)采集、系統(tǒng)管理等領(lǐng)域,Web開發(fā)和數(shù)據(jù)分析是使用Python語言最常見的方式。Python開發(fā)環(huán)境的搭建021.3.1Python下載下載Python的安裝版本/downloads/查看Python的最新源碼,二進(jìn)制文檔
/Python文檔下載/doc/1.3Python開發(fā)環(huán)境搭建Unix&Linux平臺安裝Python打開Web瀏覽器訪問/downloads/source/選擇Unix/Linux的源碼壓縮包下載及解壓壓縮包如果你需要自定義一些選項可修改Modules/Setup執(zhí)行./configure腳本makemakeinstall注意:Python會安裝在/usr/local/bin目錄中Python庫安裝在/usr/local/lib/pythonXX,XX為你使用的Python的版本號1234561.3.2Python安裝Windows平臺安裝Python打開Web瀏覽器訪問/downloads/windows/在下載列表中選擇Windows平臺安裝包,包格式為:python-XYZ.msi文件Windows系統(tǒng)必須支持MicrosoftInstaller2.0搭配使用保存安裝文件到本地計算機(jī)后運行,檢查機(jī)器是否支持MSI下載后,雙擊下載包,進(jìn)入Python安裝向?qū)?,只需要使用默認(rèn)的設(shè)置一直單擊“下一步”按鈕,直到安裝完成即可12341.3.2Python安裝3最流行的Python/R的開源數(shù)據(jù)科學(xué)平臺,提供了在Linux、Windows和MacOSX系統(tǒng)上使用Python的最簡單的方式。Anaconda包含了Python,并使用Conda來管理庫、依賴項和環(huán)境,同時集成了多個科學(xué)包及其依賴項。Anaconda工具包下載安裝數(shù)據(jù)分析包:Dask、NumPy、pandas、Numba等機(jī)器學(xué)習(xí)包:scikit-learn數(shù)據(jù)可視化包:Matplotlib、Bokeh、Datashader、Holoviews等下載地址:
/download/#windows1.4Anaconda的下載安裝1.5.1Jupyter使用1.5Anaconda中的Python開發(fā)環(huán)境是什么:JupyterNotebook是一個開源的Web應(yīng)用程序,是一個集說明性文字、數(shù)學(xué)公式、代碼和可視化圖表于一體的網(wǎng)頁版交互式Python語言運行環(huán)境。怎么用:Anaconda菜單--單擊“JupyterNotebook”菜單項--啟動JupyterNotebook。(啟動后默認(rèn)瀏覽器將會自動打開,顯示Jupyter的工作狀態(tài))選擇Upload,實現(xiàn)已有文件的上傳(后綴為.ipynb)
選擇New,實現(xiàn)新建特定類型的文件進(jìn)行編輯和運行用途:數(shù)據(jù)清洗和轉(zhuǎn)換、數(shù)值模擬、統(tǒng)計建模、數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)實例化:選擇新建Python3--打開一個新的瀏覽器窗口,在其中按Cell輸入代碼,并在Cell菜單中選擇相應(yīng)的項或單擊
運行。1.5.2Spyder使用1.5Anaconda中的Python開發(fā)環(huán)境是什么:Spyder是Python(x,y)的作者開發(fā)的一個跨平臺的集成開發(fā)環(huán)境。和其他的Python開發(fā)環(huán)境相比,它最大的優(yōu)點就是模仿MATLAB的“工作空間”的功能,可以很方便地觀察和修改數(shù)組的值。1.5.2Spyder的使用1.5Anaconda中的Python開發(fā)環(huán)境代碼區(qū)Variableexplorer窗口IPythonconsoleIPythonconsole
窗口代碼區(qū),編寫后,可選擇Run菜單中的相應(yīng)菜單項運行。如運行整個文件,可單擊Run菜單項或按下F5如只運行部分代碼,可選中要執(zhí)行的代碼后單擊Runcell或按下Ctrl+回車。1.5.2Spyder的使用Variableexplorer窗口,觀察當(dāng)前程序中的變量情況,包括變量的名字、類型、大小和取值情況。在某個變量名上雙擊,可以打開窗口查看該變量的詳細(xì)情況。1.5.2Spyder的使用右下側(cè)的是IPythonconsole,顯示代碼的運行結(jié)果。我們也可以在IPythonconsole輸入語句,直接運行觀察結(jié)果1.5.2Spyder的使用1.5.3使用conda管理包1.5Anaconda中的Python開發(fā)環(huán)境查看已安裝包安裝包卸載和更新包查看已經(jīng)安裝的包:condalist安裝新的包:condainstallpackage_name可以同時安裝多個包:例:condainstallnumpyscipypandas還可以添加版本號:例:condainstall
numpy
=
1.10卸載包:condaremovepackage_name查看某個具體包的安裝情況:condalistpackage_name更新包:condaupdatepackage_name更新環(huán)境中所有包:condaupdate–all1.5.4第三包管理的例子1.5Anaconda中的Python開發(fā)環(huán)境Scikit-learn包的安裝和測試Scikit-learn官網(wǎng)地址:Anaconda中默認(rèn)已經(jīng)安裝了Scikit-learn工具包,我們測試是否正確安裝。1.6使用百度AIStudio云計算編程環(huán)境百度AIStudio(ArtificialIntelligenceStudio,人工智能平臺)是集成了大數(shù)據(jù)和人工智能的云計算平臺。該平臺集合了AI教程、代碼環(huán)境、算法算力和數(shù)據(jù)集,為開發(fā)者提供了免費的在線云計算編程環(huán)境,用戶不需要再進(jìn)行環(huán)境配置和依賴包等繁瑣步驟,可以隨時隨地上線AIStudio開展深度學(xué)習(xí)項目。123登錄AIStudio平臺平臺的網(wǎng)址為:創(chuàng)建項目啟動并運行項目1.6使用百度AIStudio云計算編程環(huán)境Python運行原理及編寫規(guī)范03解釋器將程序代碼編譯為字節(jié)碼,字節(jié)碼在Python虛擬機(jī)程序里對應(yīng)的是PyCodeObject對象,而字節(jié)碼在磁盤上是以后綴為.pyc文件的形式存在,默認(rèn)放置在Python安裝目錄的_pycache_文件夾下。由開發(fā)人員編寫程序代碼,也就是編碼階段,此時產(chǎn)生的文件是以.py為后綴的。解釋器將編譯好的字節(jié)碼載入一個Python虛擬機(jī)中,由虛擬機(jī)一條一條執(zhí)行字節(jié)碼指令,進(jìn)而完成程序的運行。1.7Python的運行原理
Python的代碼塊不使用大括號{}或者begin…end來控制類、函數(shù)以及其他邏輯判斷,而是使用代碼縮進(jìn)和冒號來分隔代碼塊。Python接受空格和制表符作為縮進(jìn),但是需要注意的是空格和制表符不能混用??s進(jìn)的數(shù)量是可變的,但要求所有的代碼塊語句須包含相同的縮進(jìn)量,一般使用一個制表符或者四個空格來表示特定的代碼塊。當(dāng)采用了不合理的代碼縮進(jìn)時,會出現(xiàn)錯誤。1.8Python的編寫規(guī)范行和縮進(jìn)
Python語句中一般以新行作為語句的結(jié)束符。但是我們可以使用斜杠“\”或者括號:[]、{}、()將一行的語句分為多行顯示。1.8Python編寫規(guī)范多行語句
Python中引號(‘)、雙引號(“)、三引號(’‘’或”“”)都可以用來表示字符串,需要注意的是引號的開始與結(jié)束必須的相同類型的。
一般情況下,單引號和雙引號的效果是一樣的,但在字符串中包含單引號的時候,使用雙引號可以省略轉(zhuǎn)義字符,更有利于避免錯誤、提高可閱讀性。同理,如果字符串中包含雙引號,則使用單引號會使代碼看起來更加簡化。1.8Python編寫規(guī)范Python引號
三引號可以由多行組成,編寫多行文本的快捷語法,常用于文檔字符串。
三引號還起到了換行的作用。同時,三引號還有一個特別的作用,就是在文件的特定地點,可以起到注釋的作用。1.8Python編寫規(guī)范Python引號Python中使用“#”來進(jìn)行單行注釋。1.8Python編寫規(guī)范Python注釋Python中使用三引號來進(jìn)行多行注釋,其中三個單引號(’’’)和三個雙引號(”””)的作用是一樣的。第一章Python概述謝謝!Python數(shù)據(jù)分析與數(shù)據(jù)挖掘第2章Python基礎(chǔ)語法主講人:***15-10月-23Python數(shù)據(jù)分析與數(shù)據(jù)挖掘目錄contents標(biāo)識符與變量0102輸入與輸出03Python數(shù)據(jù)結(jié)構(gòu)04運算符與表達(dá)式程序的流程控制052.1標(biāo)識符與變量012.1.1
Python標(biāo)識符Python中的標(biāo)識符可以由英文、數(shù)字以及下劃線(_)組成,但不能以數(shù)字開頭。Python中的標(biāo)識符是區(qū)分大小寫的。以下劃線開頭的標(biāo)識符有特殊意義:以單下劃線開頭的(如_test)代表不能直接訪問的類屬性,需通過類提供的接口進(jìn)行訪問,不能用fromxxximport*的形式導(dǎo)入;以雙下劃線開頭的(如__test)代表類的私有成員;以雙下劃線開頭和結(jié)尾的(如__test__)代表Python里特殊方法專用的標(biāo)識,如__init__()代表類的構(gòu)造函數(shù)。2.1.2
Python關(guān)鍵字關(guān)鍵字是在Python內(nèi)部已經(jīng)使用的標(biāo)識符,這些關(guān)鍵字不能用作常數(shù)或變數(shù),或任何其他標(biāo)識符名稱??梢允褂萌缦抡Z句查看Python中的關(guān)鍵字。[例2-1]查看Python中的關(guān)鍵字。2.1.3變量與賦值Python的變量一般不需要聲明,可以根據(jù)賦值給變量的數(shù)據(jù)來自動確定變量的類型,然后分配相應(yīng)的存儲空間。
定義一個變量,就是向內(nèi)存申請一個帶地址的訪問空間對象,用來存儲數(shù)據(jù),可以通過變量名找到(指向)這個值。內(nèi)存中變量主要包括變量的標(biāo)識、名稱和數(shù)據(jù)這些信息。每個變量在使用前都必須賦值,變量賦值以后該變量才會被創(chuàng)建。等號(=)用來給變量賦值。等號(=)運算符左邊是一個變量名,等號(=)運算符右邊是存儲在變量中的值。2.2輸入與輸出022.2.1數(shù)據(jù)輸入Python中從鍵盤輸入數(shù)據(jù)可以使用input()函數(shù),該函數(shù)的返回值是字符串。語法:變量名=input(“輸入提示信息字符串”)功能:從標(biāo)準(zhǔn)輸入讀取一行,并以字符串形式返回,去掉結(jié)尾的換行符。[例2-2]input函數(shù)輸入數(shù)據(jù)
Input函數(shù)[例2-3]input函數(shù)外使用類型轉(zhuǎn)換函數(shù)
2.2.1數(shù)據(jù)輸入Python可以使用eval函數(shù)接收多個數(shù)據(jù)輸入,字符串?dāng)?shù)據(jù)輸入時要帶上引號,間隔符必須是逗號。語法:eval(expression[,globals[,locals]])功能:eval()函數(shù)用來執(zhí)行一個字符串表達(dá)式,并返回表達(dá)式的值。[例2-4]eval函數(shù)輸入數(shù)據(jù)
eval函數(shù)2.2.1數(shù)據(jù)輸入input()函數(shù)會把所有輸入值(包括數(shù)字)視為字符串。若a=input(),輸入數(shù)字123后,用type(a)輸出a的類型,將顯示為<class'str'>
eval()函數(shù)將會去掉字符串最外層的引號,將其解釋為一個變量。
若b=eval(input()),輸入數(shù)字123后,用type(b)輸出b的類型,將顯示為<class'int'>,即整型。input函數(shù)和eval函數(shù)區(qū)別2.2.2數(shù)據(jù)輸出
Python中最常用的數(shù)據(jù)輸出方式就是使用print()函數(shù),與相關(guān)格式化函數(shù)組合使用,如:使用(%)或str.format()函數(shù)來格式化輸出值;用repr()或str()函數(shù)將輸出的值轉(zhuǎn)成字符串。語法:print(*objects,sep='',end='\n',file=sys.stdout,flush=False)功能:把objects中每個對象都轉(zhuǎn)化為字符串的形式,然后寫到file參數(shù)指定的文件中,默認(rèn)是標(biāo)準(zhǔn)輸出(sys.stdout)。每一個對象之間用sep所指的參數(shù)進(jìn)行分隔,默認(rèn)是空格。所有對象都寫到文件后,會寫入end參數(shù)所指字符,默認(rèn)是換行。2.2.2數(shù)據(jù)輸出格式:%[(name)][flags][width].[precision]typecode[例2-5]字符串百分號(%)格式化輸出
字符串%格式輸出常見格式化對照說明輸出類型格式說明整數(shù)輸出%o按oct八進(jìn)制輸出整數(shù)%d按dec十進(jìn)制輸出整數(shù)%x按hex十六進(jìn)制輸出整數(shù)浮點數(shù)輸出%f保留小數(shù)點后面六位有效數(shù)字%.nf,保留n位小數(shù)位%e保留小數(shù)點后面六位有效數(shù)字,指數(shù)形式輸出%.3e,保留3位小數(shù)位,使用科學(xué)計數(shù)法%g在保證六位有效數(shù)字的前提下,使用小數(shù)方式,否則使用科學(xué)計數(shù)法,%.3g,保留3位有效數(shù)字,使用小數(shù)或科學(xué)計數(shù)法字符串輸出%s字符串輸出%10s右對齊,占位符10位%-10s左對齊,占位符10位%.2s截取2位字符串%10.2s10位占位符,截取兩位字符串2.2.2數(shù)據(jù)輸出Format()函數(shù)把字符串當(dāng)成一個模板,通過傳入的參數(shù)進(jìn)行格式化,并且使用大括號‘{}’作為特殊字符代替‘%’格式:[[fill]align][sign][#][0][width][,][.precision][type][例2-6]按位置訪問參數(shù)輸出實例。
format函數(shù)格式化輸出[例2-8]對齊文本并指定寬度輸出實例。[例2-7]按名稱訪問參數(shù)輸出實例[例2-9]編寫程序,輸入三個分?jǐn)?shù),計算并輸出平均分,輸出結(jié)果保留2位小數(shù)。2.2.3輸入和輸出實踐例題2.2.3輸入和輸出實踐例題[例2-10]編寫程序,將華氏溫度轉(zhuǎn)成攝氏溫度,換算公式:C=(H-32)*5.0/9,其中C是攝氏溫度,H是華氏溫度。[例2-11]打印99乘法表,并按左下三角格式輸出。2.2.3輸入和輸出實踐例題2.3Python數(shù)據(jù)結(jié)構(gòu)032.3.1標(biāo)量-基本數(shù)據(jù)類型Python使用對象模型來存儲數(shù)據(jù),每一個數(shù)據(jù)類型都有一個相對應(yīng)的內(nèi)置類,新建一個數(shù)據(jù),實際就是在初始化并生成一個對象。基本數(shù)據(jù)類型主要包括:整型(int):可以是正整數(shù)或負(fù)整數(shù),無小數(shù)點、無大小限制。整數(shù)類型包括:十進(jìn)制整數(shù)、二進(jìn)制整數(shù)(以0b開頭)、八進(jìn)制整數(shù)(以0o開頭)及十六進(jìn)制整數(shù)(以0x開頭)。浮點型(float):由整數(shù)部分和小數(shù)部分組成,也可以使用科學(xué)計數(shù)法表示。布爾型(bool):運算結(jié)果是True和False常量,這兩個常量的值仍然是1和0,可以和數(shù)值型數(shù)據(jù)進(jìn)行運算。復(fù)數(shù)(complex):由實數(shù)部分和虛數(shù)部分構(gòu)成,可以用a+bj,或者complex(a,b)表示,復(fù)數(shù)的實部a和虛部b都是浮點型。
[例2-12]數(shù)值數(shù)據(jù)類型及轉(zhuǎn)換測試。
2.3.2序列類型序列類型包括列表、元組和字符串,這些類型有相同的訪問模式,包括:可以通過下標(biāo)位移量來訪問序列中的元素,可以通過切片的方式一次性得到列表中多個元素。序列的常用操作符(注意優(yōu)先級順序從高到低)方法說明Seq[index]返回序列中下標(biāo)為index的元素Seq[in1:in2]返回序列中下標(biāo)從in1到in2之間的元素集合Seq[i:j:k]按間隔k,返回序列中下標(biāo)從i到j(luò)之間的元素集合Seq*n序列重復(fù)n次Seq1+Seq2兩個序列連接elementinseq判斷元素是否在序列中elementnotinseq判斷元素是否不在序列中s.index(x[,
i[,
j]])x在s中首次出現(xiàn)的索引(或在索引i處或之后,在索引j之前)seq.count(x)返回x在序列中出現(xiàn)的次數(shù)2.3.2序列類型序列類型的類型轉(zhuǎn)換函數(shù)可以用來在列表、元組和字符串幾種序列類型間進(jìn)行轉(zhuǎn)換。表2-3序列類型轉(zhuǎn)換函數(shù)
函數(shù)說明list(iter)把可迭代對象轉(zhuǎn)換為列表tuple(obj)把一個可迭代對象轉(zhuǎn)換為元組對象str(obj)把obj對象轉(zhuǎn)換為字符串對象其他常用序列類型函數(shù):len()、max()、min()、sorted(),請自行練習(xí)。
2.3.2序列類型1、創(chuàng)建:用方括號括起所有元素,并且元素之間用逗號分隔。一對空的方括號表示空列表。列表2、截?。菏褂梅嚼ㄌ?[])的切片,其中,列表使用從前往后從0開始的正向索引或從-1開始的從后往前的逆向索引來標(biāo)注元素的位置列表的數(shù)據(jù)項可以進(jìn)行修改或更新:使用del語句來刪除列表的元素。列表運算符“+”用于合并列表,“*”用于重復(fù)列表。[例2-14]列表的截取。[例2-13]列表的創(chuàng)建
2.3.2序列類型3、列表方法列表方法說明list.append(x)添加元素x到列表末尾list.extend(iter)將另一個列表添加到列表的末尾list.insert(i,x)在下標(biāo)為i的元素之前加入一個元素list.remove(x)從列表里刪除第一個值為x的元素list.pop([i])刪除列表中給定位置的項,然后將其返回。如果沒有指定索引,a.pop()將刪除并返回列表中的最后一項list.clear()從列表中刪除所有元素list.count(x)返回x出現(xiàn)在列表中的次數(shù)list.sort(key=None,reverse=False)對原列表中的項目進(jìn)行排序list.reverse()反轉(zhuǎn)列表元素list.copy()返回列表的shadow副本。相當(dāng)于a[:]3.1序列類型列表4、解析:對列表中的每個元素應(yīng)用一個函數(shù)進(jìn)行計算,從而將一個列表映射為另一個列表,稱為列表解析。列表解析的基本語法格式如下:[<表達(dá)式>for<變量>in<列表>][<表達(dá)式>for<變量>in<列表>if<條件>][例2-16]列表實例,注意以下兩種寫法等價:[例2-17]列表的解析
2.3.2序列類型元組是元素的有序序列,與列表類似不同之處在于元組中的元素值不能修改。元組的創(chuàng)建很簡單,只需要在括號中添加元素,并使用逗號隔開即可,元組中沒有append,extend和insert等方法。元組的內(nèi)置函數(shù)包括len,max,min,tuple等。[例2-18]元組的創(chuàng)建及訪問。元組2.3.2序列類型Python中的字符串是一個有序字符的集合,用于表示和存儲文本信息。字符串可以使用單引號(')、雙引號(")或三引號(''')來創(chuàng)建。其中,三引號允許一個字符串跨多行,字符串中可以包含換行符、制表符以及其他特殊字符。Python中,可以使用‘+’、“*”等運算符對字符串進(jìn)行連接及重復(fù)等運算。Python提供了豐富的字符串內(nèi)建函數(shù),可以對字符串實現(xiàn)查找、檢測、大小寫轉(zhuǎn)換等功能。字符串[例2-19]字符串創(chuàng)建。[例2-20]字符串的運算符。字符串常用的字符串運算符2.3.2序列類型常用的字符串內(nèi)建函數(shù)字符串[例2-21]字符串的內(nèi)建函數(shù)。2.3.3映射類型-字典字典是Python中一種非常有用的映射類型,可以存儲任意類型對象。字典中的每個數(shù)據(jù)稱作項,項由鍵/值對組成,每個鍵/值對(key=>value)用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中,格式如下所示:dict={key1:value1,key2:value2}常見操作:訪問字典中的值增加新的鍵/值對修改或刪除已有鍵/值對刪除字典元素檢測字典中是否存在鍵
[例2-22]字典實例
2.3.4集合類型Python中的集合(set)是不重復(fù)元素的無序集合。常用功能:成員關(guān)系測試,消除重復(fù)元素,科學(xué)計算,如并、交、差、對稱差等。分類:可變集合(set)、不可變集合(frozenset)可變集合:可以添加和刪除元素不可變集合:不允許添加和刪除元素[例2-23]集合實例
2.3.5數(shù)據(jù)結(jié)構(gòu)實踐例題[例2-24]列表實例,用列表判斷輸入的字符串是不是回文。[例2-25]
集合實例,用0-10間的隨機(jī)數(shù)生成一個長度為20的列表,統(tǒng)計其中各個數(shù)出現(xiàn)的頻率。[例2-26]列表實例,從鍵盤輸入一個單詞sdel,將字符串sall中與sdel相同的單詞都刪除。[例2-27]字符串實例,愷撒密碼,也稱移位密碼,是最簡單和最廣為人知的加密技術(shù)之一。它是一種替換密碼,其中明文中的每一個字母都被一個字母替換,這個字母在字母表中的位置是固定的。例如,如果右移2,a將被c替換,b將變?yōu)閐,依此類推,如圖2.2所示。這種方法是以凱撒大帝的名字命名的,他在私人信件中使用了這種方法。[例2-28]字典實例,統(tǒng)計data目錄下文件ci.txt中保存的歌曲“Myheartwillgoon”中的詞頻,將詞頻排在前10的單詞輸出。運算符與表達(dá)式042.4運算符與表達(dá)式賦值運算符:=(簡單的賦值運算符),+=(加法賦值運算符),-=(減法賦值運算符),*=(乘法賦值運算符),/=(除法賦值運算符),%=(取模賦值運算符),**=(冪賦值運算符),//=(取整除賦值運算符)等。算術(shù)運算符:+(加),-(減)
,*(乘),/(除),%(取模,返回除法的余數(shù)),**(冪,返回x的y次冪),//(取整除,向下取接近除數(shù)的整數(shù))等。比較運算符:==(等于,比較對象是否相等),!= (不等于,比較兩個對象是否不相等),>(大于,返回x是否大于y),< (小于,返回x是否小于y),>=(大于等于,返回x是否大于等于y),<=(小于等于,返回x是否小于等于y)。邏輯運算符:and(與),or(或)和not(非)。Python中的運算符包括:賦值運算符、算術(shù)運算符、比較(關(guān)系)運算符、邏輯運算符、位運算符、成員運算符等。
表達(dá)式是將不同類型的數(shù)據(jù)(常量、變量、函數(shù))用運算符按照一定的規(guī)則連接起來的式子。2.4運算符與表達(dá)式實例[例2-29]算術(shù)運算符實例,計算圓錐體的體積和表面積。[例2-30]邏輯運算符實例,閏年判斷。2.4運算符與表達(dá)式實例流程控制052.5.1順序結(jié)構(gòu)順序結(jié)構(gòu)是流程控制中最簡單的一種結(jié)構(gòu),該結(jié)構(gòu)的特點是按照語句的先后次序依次執(zhí)行,每條語句只執(zhí)行一次。[例2-31]計算橢球的表面積和體積。[例2-32]繪制正方形。1、if-else條件語句if條件:
條件為真時要執(zhí)行的語句塊else:
條件為假時要執(zhí)行的語句塊2、if-elif-else判斷語句if條件1:
條件1為真時執(zhí)行的語句塊1elif條件2:
條件1為假且條件2為真時執(zhí)行的語句塊2elif條件n:
條件1至條件n-1全部為假且條件n為真時執(zhí)行的語句塊nelse:
上述條件都不滿足時執(zhí)行的語句塊n+14、switch語句的替代方案定義一個字典調(diào)用字典的get()獲取相應(yīng)的表達(dá)式。3、if語句的嵌套if條件1: if條件2:
條件1為真且條件2為真時執(zhí)行的語句塊1 else:
條件1為真且條件2為假時執(zhí)行的語句塊2else:條件1為假時執(zhí)行的語句塊32.5.2選擇結(jié)構(gòu)2.5.2選擇結(jié)構(gòu)實例[例2-33]從用戶輸入的三個數(shù)中輸出最大的數(shù)。[例2-34]猜數(shù)字游戲。2.5.2選擇結(jié)構(gòu)實例[例2-35]成績等級換算[例2-36]身體質(zhì)量指數(shù)BMI計算,計算方法如圖2.3所示。2.5.2選擇結(jié)構(gòu)實例[例2-37]判斷三角形的類型。[例2-38]判斷駕駛員酒醉駕。2.5.2選擇結(jié)構(gòu)[例2-39]簡單的計算器。[例2-40]阿拉伯?dāng)?shù)字轉(zhuǎn)換。2.5.3循環(huán)結(jié)構(gòu)循環(huán)是指在滿足一定條件的情況下,重復(fù)執(zhí)行一組語句的結(jié)構(gòu),其中重復(fù)執(zhí)行的語句稱作循環(huán)體。循環(huán)結(jié)構(gòu)設(shè)計三要素如下:初始化語句:循環(huán)控制變量賦初值或其他循環(huán)中用到的變量的初始化。循環(huán)條件:循環(huán)結(jié)構(gòu)繼續(xù)執(zhí)行的條件,是一個結(jié)果為True或False的表達(dá)式。迭代語句:通常是循環(huán)控制變量的改變,且朝著循環(huán)結(jié)束條件的方向變化,從而使得循環(huán)可以正常結(jié)束。2.5.3循環(huán)結(jié)構(gòu)語法格式: [初始化語句] while(循環(huán)條件):
語句塊
[迭代語句][例2-41]自然數(shù)求和。While循環(huán)[例2-42]判斷計算結(jié)果。2.5.3循環(huán)結(jié)構(gòu)for語句的基本形式:for<變量>in<序列>:循環(huán)體語句塊其中,序列可以是等差數(shù)列、字符串、列表、元組或者是一個文件對象。for循環(huán)[例2-43]計算分?jǐn)?shù)之和。[例2-44]計算1-2+3-4+……+999-1000之和。2.5.3循環(huán)結(jié)構(gòu)break語句:中途從循環(huán)結(jié)構(gòu)中退出。continue語句:跳過循環(huán)體中未執(zhí)行的語句,返回到循環(huán)體的頭部繼續(xù)執(zhí)行新一輪的循環(huán)。Break&continue[例2-45]用戶登錄模擬[例2-46]計算最大公約數(shù)和最小公倍數(shù)。2.5.3循環(huán)結(jié)構(gòu)Python支持在循環(huán)語句中關(guān)聯(lián)else語句。如果else語句和for循環(huán)語句一起使用,else塊只在for循環(huán)正常終止時執(zhí)行(而不是遇到break語句),如果else語句用在while循環(huán)中,當(dāng)條件變?yōu)镕alse時,則執(zhí)行else語句。[例2-47]判斷素數(shù)。循環(huán)中的else語句2.5.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)可以包含任意Python語句,因此也可以包含另外的循環(huán)結(jié)構(gòu),稱為嵌套循環(huán)。特點:最外層的循環(huán)稱為外循環(huán),所包含的循環(huán)稱為內(nèi)循環(huán);內(nèi)循環(huán)必須完全包含在外循環(huán)中;外循環(huán)和內(nèi)循環(huán)的控制變量不能相同;在嵌套循環(huán)結(jié)構(gòu)中,嵌套的層數(shù)可以是任意的。嵌套循環(huán)[例2-48]輸出三位的水仙花數(shù),它的每個位上的數(shù)字的3次冪之和等于它本身(例如:1^3+5^3+3^3=153)2.5.3循環(huán)結(jié)構(gòu)在循環(huán)結(jié)構(gòu)中,for或while語句之后必須緊跟至少包含一條語句的縮進(jìn)語句塊,然而有些情況下需要一個沒有循環(huán)體語句塊的循環(huán)結(jié)構(gòu),這種情況可以使用pass語句,pass語句是一個“什么也不做”的占位符語句。[例2-49]選擇與循環(huán)結(jié)構(gòu)實例,判斷10以內(nèi)的素數(shù)。Pass語句本章實踐例題062.6本章實踐例題[例2-50]用循環(huán)實現(xiàn)猜拳游戲。2.6本章實踐例題[例2-51]用循環(huán)實現(xiàn)猜數(shù)字游戲。2.6本章實踐例題[例2-52]用循環(huán)和條件判斷實現(xiàn)評分過程模擬。2.6本章實踐例題[例2-53]用輸入、輸出、循環(huán)及條件判斷語句實現(xiàn)身份證信息檢索。小結(jié)077小結(jié)本章主要介紹了Python的基礎(chǔ)語法,包括標(biāo)識符于變量、輸入和輸出、Python數(shù)據(jù)結(jié)構(gòu)、運算符與表達(dá)式、Python中的流程控制語句等。重點介紹了Python中的標(biāo)量(Scaler)、序列(Sequence)和映射(Mapping)三種數(shù)據(jù)結(jié)構(gòu),并結(jié)合多個實踐例題講解了多種數(shù)據(jù)結(jié)構(gòu)的應(yīng)用方法。通過本單元學(xué)習(xí),可以掌握Python中的順序、選擇及循環(huán)結(jié)構(gòu)的程序設(shè)計。本章習(xí)題082.8本章習(xí)題1.編寫程序,輸入球的半徑r,輸出球的表面積和體積(結(jié)果保留三位小數(shù))。提示:球的表面積計算公式為:4πr2,球的體積計算公式為:4/3πr3。1.編寫程序,輸入球的半徑r,輸出球的表面積和體積(結(jié)果保留三位小數(shù))。提示:球的表面積計算公式為:4πr2,球的體積計算公式為:4/3πr3。2.用戶輸入一個三位自然數(shù),計算并輸出其百位、十位和個位上的數(shù)字。3.已知列表li=['apple','banana','cherry','grape','orange'],請依次完成以下操作:(1)計算列表長度并輸出;(2)修改列表第2個位置的元素為“peach”,并輸出修改后的列表;(3)刪除列表中的第2至4個元素,并輸出列表;(4)列表中追加元素“strawberry”,并輸出列表;(5)在列表的第1個位置插入元素“pear”,并輸出添加后的列表;(6)將列表所有的元素反轉(zhuǎn),并輸出反轉(zhuǎn)后的列表;(7)使用for、len、range輸出列表的索引;(8)使用enumrate輸出列表元素和序號(序號從100開始)。2.8本章習(xí)題4.任意輸入三個英文單詞,按字典順序輸出。5.輸出100-200內(nèi)的所有素數(shù)。6.字符個數(shù)統(tǒng)計,統(tǒng)計給定字符串中的字符個數(shù)并輸出。7.由數(shù)字1,2,3,4能組成多少個互不相同且無重復(fù)數(shù)字的三位數(shù)?請輸出這些數(shù)字?8.輸入一個字符串,分別統(tǒng)計其中字符、空格、數(shù)字、其他字符出現(xiàn)的次數(shù),請用字典結(jié)構(gòu)實現(xiàn)?第二章Python基礎(chǔ)語法謝謝!Python數(shù)據(jù)分析與數(shù)據(jù)挖掘第3章函數(shù)主講人:***15-10月-23Python數(shù)據(jù)分析與數(shù)據(jù)挖掘目錄contents函數(shù)概述0102函數(shù)的定義03參數(shù)傳遞04函數(shù)參數(shù)設(shè)置匿名函數(shù)0506遞歸函數(shù)3.1函數(shù)概述013.1.1模塊和包Python程序是由函數(shù)(Function)、模塊(Module)和包(Package)組成。其中,模塊是處理某一類問題的變量、函數(shù)和類的集合,包是由一系列模塊組成的集合。模塊是一個Python文件,以.py結(jié)尾,模塊中能定義函數(shù)、類和變量,模塊里也能包含可執(zhí)行的代碼,運用模塊能夠有邏輯地組織Python代碼段。常用的模塊導(dǎo)入方式:importmodule1(模塊名)frommodule1import*(*表示導(dǎo)入該模塊中所有函數(shù)及變量等)frommodule1importname1(表示導(dǎo)入模塊中的一個指定的部分)包是一個分層次的文件目錄結(jié)構(gòu),它定義了一個由模塊及子包和子包下的子包等組成的Python的應(yīng)用環(huán)境。簡單來說,包就是文件夾,但該文件夾下必須存在__init__.py文件,該文件的內(nèi)容可以為空。__init__.py用于標(biāo)識當(dāng)前文件夾是一個包。3.1.1模塊和包3.1.2函數(shù)如果在開發(fā)程序時,需要某塊代碼多次,但是為了提高編寫的效率以及代碼的重用,所以把具有獨立功能的代碼塊組織為一個小模塊,這就是函數(shù)。函數(shù)是Python為了代碼效率的最大化,減少冗余而提供的最基本的程序結(jié)構(gòu)。函數(shù)是一段代碼,通過名字來進(jìn)行調(diào)用,它能將一些數(shù)據(jù)(參數(shù))傳遞進(jìn)去進(jìn)行處理,然后返回一些數(shù)據(jù)(返回值),也可以沒有返回值。3.2函數(shù)的定義023.2函數(shù)的定義函數(shù)定義的格式:def函數(shù)名():
函數(shù)體注意:函數(shù)定義后,如果不經(jīng)調(diào)用,函數(shù)將不會被執(zhí)行Python中自定義函數(shù)創(chuàng)建的方法如下,使用關(guān)鍵字def定義函數(shù),其后緊接函數(shù)名,括號內(nèi)包含了將要在函數(shù)體中使用的形式參數(shù)(簡稱:形參,調(diào)用函數(shù)時的為實參;函數(shù)可以有參數(shù),也可以沒有,但必須保留括號),以冒號結(jié)束。然后另起一行編寫函數(shù)體,函數(shù)體的縮進(jìn)為4個空格或者一個制表符。[例3-1]函數(shù)的定義舉例。3.2函數(shù)的定義[例3-2]用函數(shù)實現(xiàn)fabonaci序列。3.2函數(shù)的定義3.3參數(shù)傳遞03Python中函數(shù)參數(shù)的傳遞,可以分為實參為不可變對象的傳遞和實參為可變對象的傳遞。字符串、元組、數(shù)值等類型是不可更改的對象,而列表和字典等則是可以修改的對象。若實參為不可變對象時,即使函數(shù)體中修改了形參,實參的值在函數(shù)調(diào)用返回時仍然保持不變;如果函數(shù)調(diào)用時,參數(shù)為可變對象的傳遞,若函數(shù)體中修改了形參,則實參的值會隨之發(fā)生改變。3.3.1實參變量指向不可變變量實參變量可以指向不可變的對象,如整型。不可變對象是指對象所指向的內(nèi)存中的值不能被改變,當(dāng)改變這個變量的時候,原來指向的內(nèi)存中的值不變,變量不再指向原來的值,而是開辟一塊新的內(nèi)存,變量指向新的內(nèi)存。[例3-3]實參變量指向不可變對象實例。3.3.1實參變量指向不可變對象分析:在Python中,類型屬于對象,變量是沒有類型的,變量只是指向了對象。本例函數(shù)調(diào)用時,在參數(shù)傳遞后,實參變量x和形參變量a都指向?qū)ο?(整型)。在函數(shù)change()內(nèi),對a賦新值4,即a+1后,由于不可變對象的值不能變化,所以為4分配新的內(nèi)存單元,同時使a指向這個對象。函數(shù)調(diào)用返回時,由于變量x和a指向了不同的對象,而x所指向的不可變對象內(nèi)存地址一直沒變,所以輸出的x的值也不變。實參變量可以指向可變對象,如列表??勺儗ο笫侵笇ο蟮闹悼梢愿淖?,當(dāng)更改這個變量的時候,還是指向原來的內(nèi)存地址,只是在原來的內(nèi)存地址進(jìn)行值的修改,并沒有開辟新的內(nèi)存。3.3.2實參變量指向可變變量[例3-4]實參變量指向可變對象實例。3.3.2實參變量指向可變變量分析:本例函數(shù)調(diào)用時,在參數(shù)傳遞后,實參變量x和形參變量a都指向同一個列表(list)對象[1,2]。由于列表對象本身是可以改變的,因此在change函數(shù)里,向列表中加入一個元素,不會重新創(chuàng)建對象,而是直接在原對象中添加了新的元素。調(diào)用結(jié)束后,變量x和a仍然指向同一對象,改變a指向?qū)ο蟮闹狄簿透淖兞藊的指向?qū)ο蟮闹怠?.4函數(shù)參數(shù)設(shè)置043.4.1函數(shù)參數(shù)類型Python中的函數(shù)參數(shù)主要有以下四種:位置參數(shù):調(diào)用函數(shù)時,根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù),實參的個數(shù)和順序必須和形參保持一致,否則會拋出異常。默認(rèn)參數(shù):在定義函數(shù)時,為部分形參設(shè)置了默認(rèn)值,調(diào)用函數(shù)時可傳或不傳該默認(rèn)參數(shù)的值(注意:所有位置參數(shù)必須出現(xiàn)在默認(rèn)參數(shù)前,包括函數(shù)定義和調(diào)用)。關(guān)鍵字參數(shù):函數(shù)調(diào)用時,可以通過“鍵-值”形式指定參數(shù),即傳參時把定義函數(shù)時的參數(shù)名和對應(yīng)的值一起傳入函數(shù)中,此時可不考慮傳入?yún)?shù)的順序。可變參數(shù):主要包括任意數(shù)量的可變位置參數(shù)和任意數(shù)量的關(guān)鍵字可變參數(shù),*args參數(shù)傳入時存儲在元組中,**kwargs參數(shù)傳入時存儲在字典內(nèi)。。[例3-5]沒有參數(shù)的函數(shù)。3.4.1函數(shù)參數(shù)類型注意:__name__可以獲取函數(shù)的名稱,__doc__可以獲取函數(shù)的注釋信息。[例3-6]用帶位置參數(shù)的函數(shù),判斷是否是素數(shù)。。3.4.2位置參數(shù)3.4.3默認(rèn)參數(shù)[例3-7]在定義函數(shù)時,設(shè)置參數(shù)的默認(rèn)值。[例3-8]計算橢球的表面積和體積,調(diào)用時修改了默認(rèn)參數(shù)的值。3.4.3默認(rèn)參數(shù)3.4.3默認(rèn)參數(shù)注意:默認(rèn)參數(shù)一般要放到參數(shù)列表的最后修改3.4.2參數(shù)設(shè)置默認(rèn)值重要說明:默認(rèn)值只計算一次。當(dāng)默認(rèn)值是可變對象(如列表、字典或大多數(shù)類的實例)時,這會有所不同。以下函數(shù)將在后續(xù)調(diào)用中累積傳遞給它的參數(shù)值,默認(rèn)值在定義范圍內(nèi)的函數(shù)定義點進(jìn)行計算,如下例:請分析方法一和方法二的不同之處。[例3-9]默認(rèn)值在定義范圍內(nèi)的函數(shù)定義點進(jìn)行計算實例。方法一方法二3.4.3默認(rèn)參數(shù)[例3-10]默認(rèn)值對后續(xù)調(diào)用的影響實例。如果不希望在后續(xù)調(diào)用之間共享默認(rèn)值,則可以這樣編寫函數(shù):如果希望函數(shù)調(diào)用時,不用固定參數(shù)的順序,可以在調(diào)用的同時指定形參和實參,這些參數(shù)又稱為關(guān)鍵字參數(shù)。使用關(guān)鍵字參數(shù)是指,在函數(shù)調(diào)用時,可以明確的為形參指定實參,可以不用固定參數(shù)的順序。3.4.4關(guān)鍵字參數(shù)[例3-11]使用kwarg=value形式的關(guān)鍵字實例。(見下頁)3.4.5可變參數(shù)在Python函數(shù)中,還有一種可變參數(shù),即傳入函數(shù)的參數(shù)個數(shù)是可變的??勺儏?shù)可以分為*args和**kwargs兩種形式,若函數(shù)定義時,二者同時存在,一定需要將*args放在**kwargs之前??勺儏?shù)被組成元組在函數(shù)定義時,在形參args前加一個*號,則*args參數(shù)收集所有未匹配的位置參數(shù)組成一個元組(tuple)對象,形參args指向此元組(tuple)對象。在函數(shù)調(diào)用時,*args參數(shù)用于解包元組(tuple)對象的每個元素,作為一個一個的位置參數(shù)傳入到函數(shù)中。[例3-13]可變長度參數(shù)實例。3.4.5可變參數(shù)3.4.5可變參數(shù)2. 可變參數(shù)組成字典在函數(shù)定義時,在形參kwargs前加兩個**號,則**kwargs參數(shù)收集所有未匹配的位置參數(shù)組成一個字典(dict)對象,形參kwargs指向此字典(dict)對象。在函數(shù)調(diào)用時,*kwargs參數(shù)用于解包字典(dict)對象的每個元素,作為一個一個的關(guān)鍵字參數(shù)傳入到函數(shù)中。[例3-13]可變參數(shù)實例,傳入的參數(shù)組裝為一個字典。3.5匿名函數(shù)053.5.匿名函數(shù)Python允許使用lambda語句創(chuàng)建匿名函數(shù)(無具體的名稱)。lambda函數(shù)的語法:lambda[arg1[,arg2,.....argn]]:expression注:lambda函數(shù)能接收任何數(shù)量的參數(shù)但只能返回一個表達(dá)式,
匿名函數(shù)不能直接調(diào)用print,因為lambda需要一個表達(dá)式。[例3-14]匿名函數(shù)實例。[例3-15]匿名函數(shù)實例。3.6遞歸函數(shù)063.6遞歸函數(shù)如果一個函數(shù)在執(zhí)行過程中,又調(diào)用了函數(shù)本身,則稱為遞歸函數(shù)。注意:遞歸必須有一個明確的結(jié)束條件;每次進(jìn)入更深一層遞歸時,問題規(guī)模相比上次遞歸都應(yīng)有所減少;函數(shù)遞歸的深度不能太大,否則容易引起內(nèi)存崩潰。[例3-16]用遞歸函數(shù)實現(xiàn)返回Fibonacci序列前n個數(shù)。3.7本章實踐例題本章實踐例題[例3-17]無參函數(shù)和有參函數(shù)的定義實例。本章實踐例題[例3-18]函數(shù)的定義與調(diào)用實例。本章實踐例題[例3-19]定義計算平面上兩點間距離的函數(shù)distance,計算三角形周長,點在橫坐標(biāo)和縱坐標(biāo)上的位置分別用x和y表示。本章實踐例題[例3-20]輸入一個數(shù)字,用遞歸函數(shù)求出該數(shù)字的各位數(shù)之和。本章實踐例題[例3-21]設(shè)置函數(shù)參數(shù)值的實例。本章實踐例題[例3-22]可變參數(shù)的函數(shù)實例。本章實踐例題[例3-23]鍵盤輸入n個數(shù)組成列表(輸入-1結(jié)束),編寫函數(shù)calc(輸入?yún)?shù)為該列表),求該列表的總和及均值。本章實踐例題[例3-24]使用函數(shù),判斷輸入字符串是否為回文串。本章實踐例題[例3-25]使用函數(shù),根據(jù)中獎概率模擬中獎次數(shù)。小結(jié)本章主要介紹了Python語言中的函數(shù),并結(jié)合實例講解了函數(shù)的定義方法,函數(shù)中參數(shù)的傳遞方法,函數(shù)中參數(shù)的設(shè)置,以及匿名函數(shù)、遞歸函數(shù)等內(nèi)容。需重點掌握的內(nèi)容包括:函數(shù)的定義方法、函數(shù)參數(shù)的設(shè)置和匿名函數(shù)的使用。小結(jié)本章習(xí)題1.定義函數(shù)triangle(a,b,c),可以根據(jù)用戶輸入的三邊,判斷三角形類型。2.編寫函數(shù),計算用戶輸入數(shù)據(jù)的平均值、方差、中位數(shù)。3.編寫函數(shù)fun(filename),從文件中(文件中是由空格分開的數(shù)字)讀出所有數(shù)字,求所有數(shù)字的和。4.編寫函數(shù)getbin(number),返回輸入整數(shù)的二進(jìn)制形式。5.Fibonacci序列實例,定義函數(shù),能返回由斐波那契數(shù)列中前n個數(shù)組成的列表。6.編寫函數(shù),能刪除傳入字符串中的標(biāo)點符號。本章習(xí)題第三章函數(shù)謝謝!Python數(shù)據(jù)分析與數(shù)據(jù)挖掘第4章類與對象主講人:***15-10月-23Python數(shù)據(jù)分析與數(shù)據(jù)挖掘目錄contents面向?qū)ο?102類和對象03類定義與使用04屬性方法05繼承0706運算符重載面向?qū)ο?14.1面向?qū)ο竺嫦驅(qū)ο蠖x:是針對面向過程這一思想的不足所提出的,是指以“對象”為核心反映現(xiàn)實中的事物,并以對象之間的消息傳遞描述事物之間的關(guān)系,從而構(gòu)建程序。實施過程:首先依據(jù)對現(xiàn)實需求的分析抽象提取出多個對象,然后為其增加相應(yīng)的屬性和功能,從而達(dá)到讓對象實現(xiàn)相關(guān)的動作。應(yīng)用:數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等多個領(lǐng)域。優(yōu)點:較于面向過程,更適用于復(fù)雜化的程序,且易維護(hù)、易復(fù)用、易擴(kuò)展,思維邏輯更加貼近于現(xiàn)實生活,更容易解決大型的復(fù)雜的業(yè)務(wù)邏輯。面向過程定義:它是以解決問題的過程為核心進(jìn)行編程,是一種自頂向下、逐步細(xì)化的過程,更側(cè)重于過程之間的關(guān)系。存在問題:面對復(fù)雜的問題時,過程之間相互調(diào)用,步驟流程錯綜復(fù)雜,面向過程就很難解決,或者代碼會特別繁雜。類和對象024.2類和對象Python作為面向?qū)ο蟮恼Z言,其實現(xiàn)基礎(chǔ)就是類和對象。類(class)是指具有相似特征和行為的事物的集合,是一種廣義的數(shù)據(jù)類型,支持定義復(fù)雜數(shù)據(jù)的特性,包括靜態(tài)特性(即數(shù)據(jù)抽象)和動態(tài)特性(即行為抽象,也就是對數(shù)據(jù)的操作方法),如:正方形、平行四邊形都屬于四邊形這一類,而四邊形的周長和面積則是對應(yīng)的操作。對象是現(xiàn)實中該類事物的一個個體,是類的實例。一個類可以支持多個對象的創(chuàng)建,而創(chuàng)建類的一個實例的過程被稱為實例化。例如:鳥類是一個類,其中具備性別,年齡等屬性,會飛,鳴叫等是方法,而喜鵲、鳳凰、鸚鵡等鳥類是幾個對象。4.2類和對象類與對象的區(qū)別之處:類是對象的抽象,而對象是類的具體實例。類是抽象的,而對象是具體的。每一個對象都是某一個類的實例。每一個類在某一時刻都有零或更多的實例。類是靜態(tài)的,它們的存在、語義和關(guān)系在程序執(zhí)行前就已經(jīng)定義好了,對象是動態(tài)的,它們在程序執(zhí)行時可以被創(chuàng)建和刪除。類是生成對象的模板。類定義與使用034.3類定義與使用類通過class定義,定義時類名一般需要首字母大寫。定義格式如下:class類名:
屬性名=屬性值 def__init__(self,x,y): self.XXX=x self.XXX=y
def方法名(self):
方法體 def方法名(self):
方法體說明:定義類與內(nèi)置類地位相同,可以出現(xiàn)在代碼中的任何位置,最常見的是出現(xiàn)在模塊外層,通過import語句導(dǎo)入并使用。類屬性,是在類中方法之外定義的,可通過類名訪問。此外,類屬性也可通過對象訪問,但一般不建議這樣做,容易導(dǎo)致類屬性值不一致的情況。類方法,是對動態(tài)特征的抽象,一個類中可定義多個不同的方法,而每個方法的第一個參數(shù)都是self,其代表要創(chuàng)建的對象本身。此外,類方法只能通過對象來調(diào)用,即向類發(fā)消息請求對象執(zhí)行某個方法。class類名:
屬性名=屬性值
def__init__(self,x,y): self.XXX=x self.XXX=y def方法名(self):
方法體 def方法名(self):
方法體說明:構(gòu)造函數(shù)(__init__)初始化程序,通常在創(chuàng)建和初始化這個類的新對象時被調(diào)用,Python提供一個默認(rèn)的構(gòu)造函數(shù)。如果類中沒有顯性定義__init__()方法,則創(chuàng)建對象時調(diào)用默認(rèn)方法,不做任何操作,直接返回一個對象;如果類中顯性定義了__init__()方法,則創(chuàng)建對象時會優(yōu)先調(diào)用顯式方法。__init__()方法的第一個參數(shù)是self,表示正在創(chuàng)建的對象,可以通過方法體中的語句實現(xiàn)為對象的屬性賦值。該方法還可以有多個參數(shù),創(chuàng)建對象時需要為這些參數(shù)提供實際值,從而實現(xiàn)對象屬性的操作。4.3類定義與使用類的使用是在主函數(shù),具體語法格式如下:對象名=類名()對象名.方法名()【分析】:類定義放在CLASS.py文件中,在本例中使用到其中的Student類,采用導(dǎo)入模塊的形式將其導(dǎo)入。利用“Student”類創(chuàng)建一個對象名為“zhangsan”的對象,創(chuàng)建時采用Python默認(rèn)的構(gòu)造函數(shù),并通過“類名.屬性”和“對象名.方法名”的方式訪問類屬性(age)和對應(yīng)的方法(learning()和play()方法)。[例4-1]類的定義實例。4.3類定義與使用【分析】:類定義放在CLASS.py文件中,在本例中使用到其中的Student_new類。在類定義中定義了類屬性(age)、對象屬性(weight和height)和方法(BMI())。在主函數(shù)中創(chuàng)建一個名為“wangwu”的對象,創(chuàng)建時采用顯式定義的構(gòu)造函數(shù)__init__,并將其初始化,傳入對象的身高和體重。以“對象名.屬性”和“對象名.方法名”的方式訪問類屬性和對應(yīng)的方法,同時在主函數(shù)中修改屬性值。[例4-2]類的定義實例。4.3類定義與使用屬性044.4.1實例屬性和類屬性類屬性:在定義類中且在方法之外定義的屬性,是所有類的對象都具有的屬性。通常情況下,類屬性一般通過類名進(jìn)行訪問,也可通過對象名進(jìn)行類屬性的訪問,但一般不推薦,容易造成屬性值不一致的情況。同時可在主函數(shù)中直接修改屬性值或者直接添加屬性,如“Student”類中的“age”屬性。實例屬性:定義在構(gòu)造函數(shù)__init__中的屬性,定義時以self為前綴。實例屬性是描述某一對象特征的數(shù)據(jù),故而只專屬于對象的屬性,也只能通過對象名訪問,如Student_new類中的self.weight和self.height屬性。實例屬性的設(shè)置也比較靈活,可以在定義類中的__init__方法中設(shè)置,也可在主函數(shù)中直接添加修改。[例4-3]類的實例屬性與類屬性實例。(Student_new參照4-2)【分析】:類定義放在CLASS.py文件中,在本例中使用到其中的Studen_new類。創(chuàng)建對象時采用顯式定義的構(gòu)造函數(shù)__init__,并通過“對象名.屬性”和“對象名.方法名”的方式訪問類屬性和對應(yīng)的方法。同時在主函數(shù)中對已有的類屬性和實例屬性修改,并新增類屬性(sex)和實例屬性(score)。4.4.1實例屬性和類屬性在有時,類中的一些屬性不希望對外公開,因此屏蔽一些屬性值在實現(xiàn)功能時有較大意義。Python中默認(rèn)的成員函數(shù)和成員變量都是公開的,其中的私有屬性和方法沒有類似Java中public、private等關(guān)鍵詞來修飾,所以僅以編程來實現(xiàn)區(qū)分。私有屬性:屬性名前有前綴“__”的屬性,一般情況下,只能在類的內(nèi)部調(diào)用,但也可以在類外部以“實例名._類名__私有屬性名”的方式訪問。公有屬性:除私有屬性外,其余均為公有屬性。4.4.2公有屬性和私有屬性[例4-4]類的共有屬性和私有屬性實例?!痉治觥浚涸诒纠惺褂玫狡渲械腟tudent_private類。定義類中分別定義了私有屬性(__age和__weight)和公有屬性,并在方法中直接調(diào)用了私有屬性(__age屬性)。創(chuàng)建對象時采用顯式定義的構(gòu)造函數(shù)__init__,并通過“對象名.屬性”和“對象名.方法名”的方式訪問公有的類屬性和對應(yīng)的方法,但不適用于私有方法的訪問,否則會報錯。4.4.2公有屬性和私有屬性[例4-4]類的共有屬性和私有屬性實例。(以下是錯誤示范)4.4.2公有屬性和私有屬性用戶不能用wangwu.__weight方式訪問學(xué)生體重,然而用戶也就知道了__weight是個私有變量。我們有沒有一種方法讓用戶通過wangwu.weight來訪問學(xué)生分?jǐn)?shù)同時繼續(xù)保持__weight私有變量的屬性呢?這時我們可以借助python的@property裝飾器。[例4-5]裝飾器實例。注意:一旦給函數(shù)加上裝飾器@property,調(diào)用函數(shù)的時候可以不加括號直接調(diào)用。4.4.2公有屬性和私有屬性方法054.5方法實例方法:在類中定義的,一般以self作為第一個參數(shù),self代表調(diào)用這個方法的對象本身,相當(dāng)于Java中this的效果,而在方法調(diào)用時,可以不用傳入self參數(shù),Python會自動將調(diào)用這個方法的對象作為參數(shù)傳入,這也進(jìn)一步說明實例方法只可以通過對象進(jìn)行調(diào)用。在類定義中,可以通過self關(guān)鍵詞實現(xiàn)對象屬性的修改,當(dāng)方法體中的屬性與類屬性同名時,會覆蓋類屬性的值。類方法:使用修飾器@classmethod修飾的方法,它的第一個參數(shù)是“cls”,表示類本身,作用如同self。類方法可以通過類名或?qū)ο竺{(diào)用。靜態(tài)方法:是使用修飾器@staticmethod修飾的方法,該方法既不需要對象參數(shù)self,也不需要類參數(shù)cls,所以該方法沒有默認(rèn)參數(shù)。在調(diào)用靜態(tài)方法時,可以通過類名或?qū)ο竺麃碚{(diào)用。4.5.1實例方法[例4-6]實例方法實例?!痉治觥浚涸诒纠校惗x放在CLASS.py文件中,在本例中使用到其中的Cars類,Cars類中的類屬性與方法中的屬性同名(即“price”屬性),創(chuàng)建c1對象.從結(jié)果可以看出,在訪問Price_used()方法之前,使用c1對象訪問的price屬性值為100,說明訪問的是類屬性。在調(diào)用對象方法后,再使用c1對象訪問的price屬性值為80,此時訪問的是對象方法中的同名屬性。4.5.2類方法[例4-7]類方法實例?!痉治觥浚侯惗x放在CLASS.py文件中,在本例中使用到其中的Books類,類聲明中分別定義了實例方法(sell_one())和類方法(sell_two())。從前2個調(diào)用結(jié)果看,在調(diào)用實例方法(sell_one)后,類屬性的值沒發(fā)生改變,但調(diào)用類方法(sell_two)后,類的屬性值發(fā)生變化;對比后2個調(diào)用結(jié)果,可見類和對象都可調(diào)用類方法。4.5.3靜態(tài)方法[例4-8]靜態(tài)方法實例?!痉治觥浚簭倪\行結(jié)果來看,類和對象均可實現(xiàn)靜態(tài)方法的調(diào)用。繼承064.6類的繼承繼承是面向?qū)ο蟮囊粋€重要特征,反映類與類之間的一種所屬關(guān)系,其中已經(jīng)存在的定義類一般稱為“父類”,而將要在父類基礎(chǔ)上定義的類稱為“子類”。當(dāng)子類具有與父類相同的屬性和方法時,不需要重復(fù)相同的代碼,只需直接定義新增的特征或方法。例如:在“學(xué)生”類的基礎(chǔ)上再定義新的子類“小學(xué)生”、“中學(xué)生”或“大學(xué)生”。這些子類完全擁有“學(xué)生”類的屬性和方法。如果父類中有私有屬性或方法時,子類不能繼承。繼承使用的語法格式為:class父類名:
方法體class子類名(父類名):
方法體注:子類定義中的父類名表示其繼承自哪一個父類,可以是簡單的單個類名,也可以是多個類名,還可以是復(fù)雜的表達(dá)式,只要值是類對象。當(dāng)有多個類名時,中間以逗號“,”隔開,也表示子類繼承自多個父類,稱為多繼承。4.6.1隱形繼承1、隱性繼承是指子類完全繼承父類的全部屬性與方法,沒有在子類方法體中定義其他的屬性或方法,從而子類具有和父類一樣的特征與功能,但如果父類中含有私有屬性或方法時,子類并不能繼承。【分析】:本代碼定義一個Animal類,類中定義了屬性foot和eating()方法,并輸出一個字符串。然后又定義一個Bird類,繼承自Animal類,方法體中沒有新增任何其他方法或?qū)傩浴W詈笥謩?chuàng)建了一個magpie對象,并訪問其foot屬性與eating()方法。[例4-9]隱性繼承實例。結(jié)論:子類對象不能直接訪問父類的私有屬性和私有方法。子類對象可以通過訪問父類方法從而間接訪問父類的私有屬性。[例4-10]子類對象訪問父類實例。4.6.1隱形繼承4.6.2覆蓋2、覆蓋
在子類與父類的繼承關(guān)系中,會出現(xiàn)子類方法名與父類方法名同名的情況,但其功能卻不一樣,在調(diào)用該方法時父類方法被完全覆蓋,即對象調(diào)用了子類中的同名方法。【分析】:初始化一個子類對象,調(diào)用born()方法,結(jié)果顯示執(zhí)行的是子類定義中的方法。[例4-11]覆蓋實例。4.6.3
super繼承3、super繼承:如果子類和父類有同名方法時,子類的方法會將父類方法覆蓋。而在實際需要中,我們有時需要調(diào)用父類的同名方法,這就需要用到super關(guān)鍵字。
super函數(shù)經(jīng)常使用在子類構(gòu)造函數(shù)__init__()的重寫上,其使用格式如下:
super().XXX()
注意:XXX()為方法名。這種形式不帶任何參數(shù),其一般出現(xiàn)在子類方法的定義里,在調(diào)用這一方法時,解釋器會先找到這一對象的直接父類,再在父類中開始找尋XXX()方法,并執(zhí)行,然后再執(zhí)行所在子類方法?!痉治觥浚簃agpie對象要求調(diào)用born()方法,這一方法是指子類中的方法,其方法體中含有super().born(),所以解釋器從magpie所屬父類(Animal)開始查找born()方法,并執(zhí)行,之后解釋器才執(zhí)行子類的born()方法中的內(nèi)容。4.6.3
super繼承[例4-12]super繼承實例。4、多重繼承是指子類不僅僅可以繼承一個父類,還可以繼承多個父類。例如:青蛙,既可以在陸地生活,也可以在水中生活?!痉治觥浚菏紫壬昝魇?個父類,其類的定義中均包含相同的屬性(foot)和方法(get_foot()),以及不同名的方法。子類Frog的定義中指明了屬性和方法繼承至哪個父類。主函數(shù)中分別訪問了兩個父類的方法及同名方法。結(jié)果顯示,F(xiàn)rog類的對象同時繼承了兩個父類的方法。4.6.4多重繼承[例4-12]super繼承實例。運算符重載074.7運算符重載Python中允許用戶使用一些特定的方法實現(xiàn)運算符重載,從而使類的實例對象支持Python的各種內(nèi)置操作。方法說明運算符__add__(self,num)加法self+num__sub__(self,num)減法Self-num__mul__(self,num)乘法Self*num__mod__(self,num)取余Self%num__pow__(self,num)冪運算Self**num__truediv__(self,num)除法Self/num__radd__(self,num)加法num+self__iadd__(self,num)加法self+=num__and__(self,num)位與self&num__or__(self,num)位或self|num運算符重載方法(部分)4.7運算符重載[例4-14]運算符重載實例。【分析】:本例中定義了一個Calculator類,并重載__add__()和__sub__()方法,初始化一個對象后,對其進(jìn)行加減運算。本章實踐例題本章實踐例題[例4-15]定義父類SchoolMember,定義子類Teacher和Student,實現(xiàn)學(xué)校人員登記。本章實踐例題[例4-16]定義類Triangle,實現(xiàn)能根據(jù)輸入的三邊,計算三角形的周長和面積。本章實踐例題[例4-17]定義類Clock,實現(xiàn)數(shù)字時鐘計時。小結(jié)本章結(jié)合實例介紹了Python中面向?qū)ο缶幊痰幕A(chǔ)內(nèi)容,主要包括類的屬性與方法的介紹以及相關(guān)應(yīng)用實例的分析,幫助理解面向?qū)ο蟮木幊趟枷?。需重點掌握的內(nèi)容有:類與對象的概念、Python中類的聲明方法、類的屬性與方法、類的封裝、繼承和多態(tài)等。小結(jié)本章習(xí)題1. 設(shè)計一個Car類,有類屬性price,有一個實例屬性color。請寫出類的定義語句,并在主程序中寫出生成該類的對象語句。主程序中還包括如下語句:Car.price=320000#修改類屬性C='TSL'#增加類屬性Car1.color="BLUE"#修改實例屬性2. 設(shè)計一個水果類Fruit,有私有屬性color,私有屬性city,私有方法outputColor,私有方法outputCity,公有方法output(其中調(diào)用私有方法outputColor和outputCity),定義靜態(tài)方法getPrice和setPrice。在主程序中定義Fruit類的對象,并嘗試調(diào)用它的各個方法。3. 設(shè)計一個三維向量類Vecter3,并實現(xiàn)向量的加法(__add__)、減法以及向量與標(biāo)量的乘法和除法運算。本章習(xí)題4. 定義矩形類rectangle,有實例屬性breadth和length,并定義實例方法area,計算并返回矩形面積。5. 定義圓形類circle,有實例屬性radius,并定義實例方法area和perimeter,計算并返回矩形面積。6. 定義父類person,有類屬性name及age,有私有屬性__height,有實例方法info,能輸出person的name、age及__height信息。子類student類繼承person,有類屬性grade,有實例方法info,能輸出學(xué)生的name、age及grade信息。本章習(xí)題第四章類與對象謝謝!Python數(shù)據(jù)分析與數(shù)據(jù)挖掘第5章NumPy基礎(chǔ)與應(yīng)用主講人:***15-10月-23Python數(shù)據(jù)分析與數(shù)據(jù)挖掘目錄contents數(shù)組基礎(chǔ)0102數(shù)組的相關(guān)操作03數(shù)組讀寫數(shù)組基礎(chǔ)015.1Numpy簡介NumPy是Python的一個基礎(chǔ)科學(xué)計算包,是許多高級的第三方科學(xué)計算的模塊,如:Matplotlib、Pandas等,都是基于NumPy所構(gòu)建的。它包含以下幾個特點:強(qiáng)大的多維數(shù)組對象;精細(xì)而復(fù)雜的功能;用于集成C/C++和Fortran代碼的工具;實用的線性代數(shù),傅里葉變換和隨機(jī)數(shù)功能。對于許多用戶,尤其是Windows用戶,學(xué)習(xí)Python的常用工具為Anaconda,其中包括所有數(shù)據(jù)分析的關(guān)鍵包,不需要再次安裝,但可以在命令行中使用pip更新:
pipinstallnumpy–U
可以在/doc/stable/上查閱NumPy的使用文檔。5.2NumPy數(shù)組基礎(chǔ)數(shù)組是NumPy中的核心類型,全稱為N維數(shù)組(N-dimensionalArray,ndarray),整個NumPy模塊都是圍繞數(shù)組來構(gòu)建的,它是一個固定大小和形狀的大數(shù)據(jù)集容器,該對象由兩部分組成:(1) 實際的數(shù)據(jù);(2) 描述這些數(shù)據(jù)的元數(shù)據(jù);大部分的數(shù)組操作僅僅修改元數(shù)據(jù)的部分,而不改變底層的實際數(shù)據(jù)。
NumPy.array和標(biāo)準(zhǔn)的Python庫中的Array.array是不一樣的,標(biāo)準(zhǔn)的Python庫中的Array.array只能處理一維數(shù)組,且所有元素的類型必須是一致的,支持的數(shù)據(jù)類型有整型、浮點型以及復(fù)數(shù)型,但這些類型不能夠滿足科學(xué)計算的需求,因此NumP
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校教學(xué)成果表格
- 農(nóng)學(xué)作物種植技術(shù)測試題及答案解析
- 高效辦公數(shù)字化解決方案實踐指南
- 財務(wù)人員擔(dān)保協(xié)議書
- 水資源智能監(jiān)控與管理合同
- 金融科技反欺詐技術(shù)合作協(xié)議
- 基于人工智能的智能種植管理系統(tǒng)優(yōu)化實踐
- 月子中心月嫂服務(wù)合同
- 建筑裝修行業(yè)施工安全責(zé)任書
- 西方童話格林童話讀后感和兒童成長影響
- 智能割草機(jī)器人的概述外文翻譯
- 井下作業(yè)工:初級井下作業(yè)工考試答案二
- 學(xué)生心理健康一生一策檔案模板
- 《胸外按壓》課件
- 2024屆南通二模(又蘇北七市二模)數(shù)學(xué)試題
- 北師大版六年級下冊書法練習(xí)指導(dǎo)教案教學(xué)設(shè)計
- 江西省南昌市2024屆高三一模語文試題及答案解析
- 2023年小學(xué)音樂2022版新課程標(biāo)準(zhǔn)考試測試題及答案(共五套)
- 第一章村集體經(jīng)濟(jì)組織會計制度講解
- 湖北煙草公司招聘考試真題
- 2024年江蘇護(hù)理職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
評論
0/150
提交評論