版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
機器學習與大數據技術第八章基礎知識語言基礎函數類Python基礎文件創新與貢獻研究意義選題背景第八章Python是由GuidovanRossum于九十年代初,在荷蘭國家數學和計算機科學研究所設計和實現。經過20多年的發展,Python已經成為深度學習和機器學習最好的編程語言之一,也是計算機視覺、人工智能等優選的語言和編程工具。Python特點是簡單易學,功能強大,可移植性和可擴展性強,開源免費,支持面向對象編程。8.1基礎知識8.1基礎知識創新與貢獻研究意義選題背景第八章8.1基礎知識8.1.1Python安裝與使用目前,Python版本有兩個不同的版本:Python2和較新的Python3。Python的開發者一直致力于豐富和強化其功能。Python的安裝很簡單,打開Python官方主頁https://www./后,選擇適合自己的版本下載并安裝。如果使用的是Linux系統,例如Ubuntu,那么可能已經預裝了某個版本的Python,可以根據自己的需要進行升級。Python自帶了一個在終端窗口中運行的解釋器IDLE,無需保存整個程序就能夠運行Python代碼片段。IDLE使用交互式編程模式,直接在提示符“>>>”后面輸入相應的命令并回車執行即可,如果執行順利,就可以返回執行結果,否則會拋出異常。創新與貢獻研究意義選題背景第八章8.1基礎知識8.1.2編碼規范(1)縮進
Python程序依靠代碼塊的縮進來體現代碼之間的邏輯關系。對于類定義、函數定義、選擇結構、循環結構以及異常處理結構,行尾的冒號以及下一行的縮進表示一個代碼塊的開始,而縮進結束則代表一個代碼塊的結束。并且在編寫程序時,同一個級別的代碼塊的縮進量必須相同。(2)注釋注釋對于程序理解和團隊合作開發具有非常重要的意義。一個可維護性和可讀性都很強的程序一般會包含30%以上的注釋。Python中常用的注釋方式主要有兩種:以符號#開始,表示本行#之后的內容為注釋;包含在一對三引號之間且不屬于任何語句的內容將被解釋器認為是注釋。(3)每個import語句只導入一個模塊,盡量避免同時導入多個模塊。創新與貢獻研究意義選題背景第八章8.1基礎知識(4)如果一行語句太長,可以在行尾使用續行符“\”來表示下面緊接的一行仍屬于當前語句。(5)使用必要的空格與空行增強代碼的可讀性。一般來說,運算符兩側、函數參數之間、逗號兩側使用空格進行分隔。(6)適當使用異常處理結構提高程序容錯性和健壯性,但不能過多依賴異常處理結構,仍然需要適當的顯式判斷。
創新與貢獻研究意義選題背景第八章8.1基礎知識8.1.3模塊導入Python默認安裝僅包含部分基本或核心模塊,但用戶可以很方便地安裝其他擴展模塊,pip是管理擴展模塊的重要工具。在Python啟動時,僅加載了很少的一部分模塊,在需要時由程序員顯式地加載其他模塊。這樣可以減小程序運行的壓力,僅加載真正需要的模塊和功能,且具有很強的可擴展性。模塊中可以定義變量、函數和類,也可以包含可執行語句。創新與貢獻研究意義選題背景第八章8.1基礎知識1導入方法當完成某些特定功能的一段程序需要反復執行時,可以將它以文件的形式存儲起來構成一個模塊。定義好模塊之后,使用import語句引入模塊,from方法導入模塊,通過下面三個步驟來完成:在Python模塊加載路徑中查找相應的模塊文件;將模塊文件編譯成中間代碼;執行模塊文件中的代碼。創新與貢獻研究意義選題背景第八章8.1基礎知識2標準庫模塊
標準庫是Python自帶的開發包,包含的模塊非常多,一些常用的模塊如表8-1所示。
表8-1Python常用標準庫序號模塊名稱模塊的功能1sys獲取命令行的參數、程序的路徑和當前系統等信息的功能。2osos模塊包含基本的操作系統功能。
3
globPython自帶的一個文件操作相關模塊,用它可以查找符合自己目的的文件。它的主要方法就是glob,該方法返回所有匹配的文件路徑列表。4math實現基本的數據運算。5random用于生成隨機數。6platform獲取所用操作系統的詳細信息和與Python相關的信息。7subprocess用來生成子進程,并可以通過管道連接它們的輸入/輸出錯誤,以及獲得它們的返回值。8Queue提供隊列操作的模塊。9StringIO實現在內存緩沖區中讀寫數據。10time提供各種關于時間的函數。11datetime日期格式化操作。使用help()函數可以查看函數或模塊用途的詳細說明,顯示幫助信息。創新與貢獻研究意義選題背景第八章8.1基礎知識8.1.4異常處理異常是指程序運行時發生錯誤。引發錯誤的原因有很多,例如下標越界、除零、網絡異常、磁盤空間不足、文件不存在等等。異常處理就是系統處理這些非正常的狀態,保證程序不因運行這些錯誤而導致崩潰。Python使用異常對象表示異常,若程序在編譯或運行過程中發生錯誤,就會拋出異常對象,程序進入異常處理。如果沒有處理這些異常對象,程序就會終止然后執行回溯。創新與貢獻研究意義選題背景第八章8.1基礎知識3異常的回溯當異常發生時,程序會回溯異常,返回大量錯誤信息。這可能會給程序員定位及糾錯帶來困難,這時可以使用sys模塊來回溯最近一次異常。創新與貢獻研究意義選題背景第八章8.2語言基礎8.2語言基礎8.2.1基本數據類型1標識符標識符用來標識函數名、變量名、常量名、數組名和文件名等有效字符序列。標識符的命名規則如下;(1)標識符可以包含字母、數字和下劃線,但不能以數字開頭;(2)標識符區分大小寫;(3)標識符不能與保留字同名。Python中的保留字不能用作常數或變數,或任何其他標識符名稱,所有的關鍵字只包含小寫字母,所有保留字如下:
andexecnotassertfinallyorbreakforpassclassfromprintcontinueglobalraisedefifreturndelimporttryelifinwhileelseiswithexceptlambdayield創新與貢獻研究意義選題背景第八章8.2語言基礎2變量與常量變量是在程序運行過程中,值可以改變的量。所有的變量對應唯一的變量名,變量名和變量值是兩個不同的概念,變量在內存中占有一定的存儲單元,變量值就存儲在內存單元中。變量的命名規則與標識符的命名規則相同。變量名區分大小寫,如變量Machine和machine是兩個不同的變量。Python是強類型編程語言,解釋器會根據代碼中的賦值或運算自動判斷變量類型,在定義時不需要預先聲明變量的類型。同時Python還是一種動態類型語言,變量的類型也可以隨時發生變化。創新與貢獻研究意義選題背景第八章8.2語言基礎Python有自動內存管理的功能,會自動跟蹤所有的值,然后刪除沒有任何變量指向的值,因此在編程時不需要考慮內存管理的問題。Python中變量按照作用域可以分為局部變量和全局變量。局部變量是在函數內定義的變量,其作用域只有函數內部,局部變量的生命周期伴隨著函數代碼塊的結束而結束。全局變量又稱外部變量,是在函數外部定義的變量。全局變量可以被文件內任何函數和外部文件訪問,其作用域是整個程序。global保留字可以用于引用全局變量。創新與貢獻研究意義選題背景第八章8.2語言基礎3數字Python中數字數據類型用于存儲數值,其數值是不允許改變的。因此如果改變數字數據的值,系統將為數字重新分配內存空間。Python中數字類型分為四種:整型int,又被稱為整型或整數,只有正或負整數,不包含小數點,例如:1234、-1234。整數類型有一定的位數限制,在32位機器上,整數的位數為32位,在64位機器上,整數的位數為64位。長整型long,無限大小的整數,最后一位是大寫或小寫的字母L。浮點型float,
由整數部分與小數部分組成,浮點型也可以使用科學計數法表示。創新與貢獻研究意義選題背景第八章8.2語言基礎8.2.2運算符與表達式與其他計算機語言一樣,Python支持大多數算術運算符、關系運算符等,并遵循與大多數語言一樣的運算符優先級。Python還有一些特有的運算符,例如成員測試運算符、集合運算符、同一性測試運算符等。
Python運算符包括算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符、成員運算符和身份運算符。Python表達式是將不同類型的數據(常量、變量、函數)用運算符按照一定得規則連接起來的式子。創新與貢獻研究意義選題背景第八章8.2語言基礎1算術運算符和算術表達式Python算術運算符包括四則運算符、求模預算符和冪運算符等,如表8-2所示。算術運算符表達式說明+x+y加法運算-x-
y減法運算*x*y乘法運算/x/y除法運算%x%y求模運算**x**y冪運算//x//y兩數相除向下取整Python中的除法運算采用浮點數計算,x/y運算返回的結果是浮點類型。“%”為取模運算,x%y的運算結果是x除以y得到余數。操作符“//”可以從兩數相除中向下取整得到一個整數,丟棄小數部分。表8-2算術運算符表達式與說明創新與貢獻研究意義選題背景第八章8.2語言基礎2關系運算符和關系表達式Python中各種關系運算符如表8-3所示,運算結果為布爾型True或False。運算符表達式說明==a==b等于,比較對象是否相等!=或<>
a!=ba<>b不等于,比較兩個對象是否不相等>
a>b大于,比較a是否大于b<
a<b小于,比較a是否小于b>=a>=b大于等于,比較a是否大于或者等于b<=a<=b小于等于,比較a是否小于或者等于b表8-3關系運算符表達式和說明創新與貢獻研究意義選題背景第八章8.2語言基礎3邏輯運算符與邏輯運算表達式Python中邏輯運算符包括與and、或or、非not,如表8-4所示。運算符表達式說明andaandb邏輯與oraorb邏輯或notnota邏輯非表8-4邏輯運算符表達式和說明創新與貢獻研究意義選題背景第八章8.2語言基礎4位運算符和位運算表達式
Python按位運算符把數字按照二進制來進行計算,如表8-5所示。運算符表達式說明&a&b按位與運算符:參與運算的兩個數,如果對應的二進制位都為1,則該位的運算結果為1,否則為0|a|b按位或運算符:參與運算的兩個數,只要其中一個數對應的二進位為1時,則運算結果就為1^a
^b按位異或運算符:當兩個數對應的二進位不同時,結果為1,否則為0~~a按位取反運算符:數字每個二進制位進行取反操作,即把1變為0,把0變為1<<
a<<2左移動運算符:運算數的各二進位全部左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0>>
a>>2右移動運算符:運算數的各二進位全部右移若干位,">>"右邊的數指定移動的位數表8-5位運算符表達式和說明創新與貢獻研究意義選題背景第八章8.2語言基礎位運算符簡單計算如表8-6所示。運算操作結果a&b00111100&10001110
0000110012a|b00111000|00001101
0011110161a^b00111111^00001110
0011000149~a~00111100
11000011-61(有符號二進制數的補碼)a<<200111100<<211110000240a>>200111100>>2->0000111115表8-6位運算符計算實例創新與貢獻研究意義選題背景第八章8.2語言基礎5賦值運算符與賦值表達式賦值語句是Python中最常用的運算語句,賦值語句最基本格式為:變量=對象?!?”運算符將賦值號右邊對象的值賦值給賦值號左邊的變量?!?=”的作用是將賦值號右邊的變量或值與賦值號左邊的變量或值求和,再賦值給賦值號左邊的變量,其他賦值運算符與“+=”類似。賦值運算符表達式及說明如表8-7所示。運算符表達式說明=z=x+y將x+y的運算結果賦值給z+=z+=x等價于z=z+x-=z-=x等價于z=z-x*=z*=x等價于z=z*x/=z/=x等價于z=z/x%=z%=x等價于z=z%x//=z//=x等價于z=z**x**=z**=x等價于z=z//x表8-7賦值運算符表達式和說明創新與貢獻研究意義選題背景第八章8.2語言基礎6成員運算符與成員表達式Python中成員運算符判斷一個元素是否在一個指定序列中,包括in與notin,如表8-8所示。運算符表達式說明inainb如果在指定的序列b中找到值返回True,否則返回Falsenotinanotinb如果在指定的序列b中沒有找到值返回True,否則返回False表8-8成員運算符表達式和說明創新與貢獻研究意義選題背景第八章8.2語言基礎7轉義字符如果想要在字符中使用特殊字符,需要使用轉義字符,可以通過反斜杠“\”來實現,常用的轉義字符用法如表8-9所示。轉義字符描述\(在行尾時)續行符\\反斜杠符號\'單引號\"雙引號\a響鈴\b退格\e轉義\000空\n換行\v縱向制表符\t橫向制表符\r回車\f換頁\oyy八進制數,yy代表的字符,例如:\o12代表換行\xyy十六進制數,yy代表的字符,例如:\x0a代表換行\other其它的字符以普通格式輸出表8-9常用轉義字符用法創新與貢獻研究意義選題背景第八章8.2語言基礎8.2.3選擇與循環1選擇語句選擇語句通過判斷某些特定條件是否滿足,執行兩個或多個分支中的某個分支,決定下一步程序的執行流程,是一種非常重要的控制結構。常見的選擇語句有單分支選擇結構、雙分支選擇結構、多分支選擇結構等,語言形式靈活多變,使用時根據具體的需求選擇合適的語句。Python中條件分支語句有if語句、ifelse語句和ifelif語句。創新與貢獻研究意義選題背景第八章8.2語言基礎(1)單分支結構單分支選擇結構是最簡單的選擇結構。其中表達式后面的冒號“:”表示一個語句塊的開始,是不可缺少的,語句格式如下:if表達式:執行語句塊語句功能:當判定條件為真時,執行語句塊;條件為假時,不執行語句塊。創新與貢獻研究意義選題背景第八章8.2語言基礎(2)雙分支結構雙分支選擇結構的語句格式如下:if表達式:執行語句塊1else:執行語句塊2語句功能:當表達式為真時,執行語句塊1,否則執行語句塊2。其中if語句后面緊跟表達式和冒號,else語句后無表達式但需要冒號。if和else后語句塊不需要左右花括號。創新與貢獻研究意義選題背景第八章8.2語言基礎(3)多分支結構多分支選擇結構可以實現更為復雜的邏輯,語句格式如下:if表達式1:執行語句塊1elseif表達式2:執行語句塊2elseif
表達式3:執行語句塊3…………else:
執行語句塊n語句功能:如果表達式1成立,則執行語句塊1;當表達式1不成立時,程序流向下依次判斷,如果表達式2成立則執行語句塊2,并以此類推,否則最終執行語句塊n。創新與貢獻研究意義選題背景第八章8.2語言基礎2循環語句在Python中可以使用循環語句有規律地反復執行某些操作,解決一些實際應用。Python中的循環語句有while循環和for循環。當循環次數未知時,一般使用while循環;當循環次數已知時,一般使用for循環。Python中還有幾個循環控制語句break、continue和pass。創新與貢獻研究意義選題背景第八章8.2語言基礎(1)while循環while循環語句的基本形式如下:while表達式:循環體循環體可以是單個語句或語句塊,判斷條件可以是任意表達式,其中任何非零、或非空的值均為真。語句功能:當給定表達式為真時,執行循環體中語句或者語句塊,否則退出循環體。需要注意的是程序會先判斷表達式是否成立,然后執行循環體。創新與貢獻研究意義選題背景第八章8.2語言基礎(2)for循環for循環也稱為計數循環,通常用于遍歷序列、集合和映射對象等。語句的基本形式如下:for變量in序列或迭代對象:
循環體語句功能:for循環語句每次循環時,判斷變量是否還在序列或迭代對象中。如果仍在序列中,取出該值提供給循環體內的語句使用;如果不在序列中,則循環結束。下面的代碼使用for循環遍歷打印一個列表中的全部元素。創新與貢獻研究意義選題背景第八章8.2語言基礎(3)嵌套循環嵌套循環又稱多重循環,是指循環結構中包含其他循環結構。二重循環是最常用的嵌套循環。在嵌套循環中外層循環稱為外循環,內層循環稱為內循環。創新與貢獻研究意義選題背景第八章8.2語言基礎3break與continue語句break和continue語句在while循環和for循環中都可以使用,一般常與選擇結構結合使用,當滿足特定條件時跳出循環。在循環體內使用break語句會直接跳出循環,回到循環的頂端,并忽略continue之后的所有語句,提前進入下一次循環。過多的break和continue語句會降低程序的可讀性。創新與貢獻研究意義選題背景第八章8.2語言基礎8.2.4字符串字符串是使用單引號、雙引號引起來的若干的字符組成的集合,是Python中最常用的數據類型。其中單引號、雙引號可以互相嵌套,用來表示復雜字符串。1字符串創建使用“=”直接賦值創建字符串變量。字符串創建后就不能改變,如果想改變變量引用的字符串,只能創建新的字符串,然后使用變量引用新的字符串。字符串中有可能包含引號,如果包含的是單引號,則使用雙引號括起來;如果包含的是雙引號,則使用單引號括起來;如果既有單引號又有雙引號就需要使用轉義字符。例如:Print("Ithink,\"why?,'what?'\"")Python3完全支持中文字符,默認使用UTF8編碼格式。每一個數字、英文字母,漢字,都按一個字符進行處理。創新與貢獻研究意義選題背景第八章8.2語言基礎2字符串方法字符串是Python重要的數據類型,Python內置了大量的函數支持字符串操作,可以使用dir()函數查看所有字符串操作函數列表,使用help()函數可以查看每個函數的幫助。字符串是一種Python序列,很多Python內置函數也支持字符串操作,例如求最大值的max()方法,用來計算序列長度的len()方法等。(1)find()和rfind()find()方法檢驗字符串是否包含子字符串。如果包含,則返回開始的索引值,否則返回-1。語法格式如下:str.find(str,beg=0,end=len(string))其中str是指定檢索的字符串,beg是開始索引位置,默認值為0,end是結束索引位置,默認值為字符串的長度。rfind()方法從右向左查詢,返回字符串最后一次出現的位置,如果沒有匹配項則返回-1。創新與貢獻研究意義選題背景第八章8.2語言基礎(2)index()和rindex()index()方法和rindex()方法用來返回一個字符串在另一個字符串指定范圍中首次和最后一次出現的位置,如果不存在就會拋出異常。Index方法語法格式如下:str.index(str,beg=0,end=len(string))str是指定檢索的字符串,beg是開始索引,默認值為0,end是結束索引,默認值為字符串的長度。創新與貢獻研究意義選題背景第八章8.2語言基礎(3)count()count()方法返回一個字符串在另一個字符串中出現的次數。語法格式如下:list.count(obj)obj是列表中要計數的對象,返回值是列表中出現obj的次數。在應用的時候最好是把列表賦給一個變量,之后再用count()方法來操作。當對象是一個嵌套的列表時,要查找嵌套列表中的列表參數,count()方法同樣可以完成。創新與貢獻研究意義選題背景第八章8.2語言基礎
(4)其他常見字符串方法split()方法指定字符為分隔符,從字符串左端開始,將原始字符串分割成多個字符串,并返回分割結果的列表。join()方法將列表中多個字符串進行連接,并在相鄰兩個字符串之間插入指定字符。replace()方法用來替換字符串中指定字符。maketrans()方法用來生成字符映射表,translate()方法按映射表關系轉換字符串并替換其中的字符,組合使用這兩種方法可以同時處理多個不同的字符。lower()和upper()方法將字符串轉換為小寫、大寫。創新與貢獻研究意義選題背景第八章8.2語言基礎8.2.5列表、元組與字典序列是Python中最基本的數據結構,是一塊用來存放多個值的連續空間。常見的序列結構包括字符串、列表、元組和集合等。所有類型的序列都可以進行索引、分片、加乘等操作。其中列表、元組、字符串支持雙向索引,第一個元素下標為0,第二個元素下標為1,并以此類推;最后一個元素下標為-1,倒數第二個元素下標為-2,并以此類推。另外,Python還有與序列相關的內置函數,例如計算序列長度、求最大和最小元素等。1列表列表是最常用的Python數據類型,是用中括號“[]”括起來的元素的集合。在Python中,一個列表中元素的數據類型可以各不相同,既可以為整數、實數、字符串等基本類型,也可以是列表、元組、字典等。列表中每個元素之間用逗號分隔,當列表元素增加或刪除時,列表對象自動進行擴展或收縮內存,從而保證各個元素之間沒有縫隙。創新與貢獻研究意義選題背景第八章8.2語言基礎2元組元組與列表十分類似,但是元組創建后,內容不能被修改。元組使用小括號“()”括起來,列表使用方括號“[]”括起來。元組中的數據一旦定義就不允許更改,因此沒有append()、extend()和insert()等方法,無法向元組中添加元素,也沒有remove()或pop()方法,無法對元組元素進行刪除操作。元組讀取速度比列表快,因此如果定義了一系列常量值,需要對這些常量值進行遍歷,則使用元組而不用列表。創新與貢獻研究意義選題背景第八章8.2語言基礎(1)元組的創建通過使用圓括號“()”,圓括號里的每一個元素用逗號進行分隔來創建一個元組,也可以使用內建函數tuple()創建新元組。與列表相似,元組中的每一個元素可以是不同的數據類型。創建元組的語法格式如下:tuple_name=(element1,element2,element3,..)創建元組時,如果只含有一個元素的元組,元素后面的逗號不能省略,否則解析器就會認為該括號里面的內容是一個表達式,而不是元組的元素。當創建含多個元素的元組時,最后一個元素后面的逗號可以省略。使用tuple函數可以轉換其他序列,創建元組。創新與貢獻研究意義選題背景第八章8.2語言基礎(2)元組的訪問訪問元組和訪問列表類似,通過切片操作來實現,其返回值也是一個對象或者多個對象的集合。元組的切片操作遵循正負索引規則,有一個開始索引和一個結束索引,如果沒指定這兩個索引,則默認為序列的開始和結束位置。(3)元組組合元組中的元素值是不允許被修改的,但可以連接組合元組。(4)刪除元組元組中的元素值是不允許刪除的,但可以使用del語句刪除整個元組。創新與貢獻研究意義選題背景第八章8.2語言基礎3字典字典是用大括號“{}”括起來的鍵值對的集合,字典有鍵和值兩個屬性組成。字典的一個元素就是一個鍵值對,通常用數字或者字符串作為鍵,值可以是任意類型的對象。每個鍵和它的值之間用冒號分隔,項之間用逗號分隔,字典中的鍵是唯一的,但是值并不唯一。如果把列表和元組當作有序的對象集合類型,字典就是無序的對象集合類型。創新與貢獻研究意義選題背景第八章8.2語言基礎(1)創建字典創建字典時將鍵值對用大括號{}括起來,鍵值之間用冒號分隔,鍵值對之間用逗號分隔。
(2)訪問字典中的元素值與列表和元組不同,列表和元組根據索引來存取對象,字典則根據鍵來存取對象。
(3)添加字典元素
(4)修改字典元素
修改字典元組與添加字典元組的格式相似,不同的是[]為字典中已有的鍵。
(5)刪除字典元素
可以使用del或字典的pop方法來刪除字典元素,刪除字典元素時,必須指定要刪除的元素的鍵。
(6)清空字典
使用clear()方法可以清空字典中所有的元素。
(7)刪除整個字典
使用del命令可以刪除整個字典。創新與貢獻研究意義選題背景第八章8.2語言基礎4序列的常用操作(1)索引索引是對每個序列元素分配一個位置編號,所有的元素的編號從0開始遞增,通過編號可以對序列元素進行訪問。從右邊開始索引時,最右邊的一個元素的索引為-1,向左依次遞減。(2)分片索引用來對單個元素進行訪問,分片可以對一定范圍內的元素進行訪問。分片通過冒號相隔的兩個索引來實現,需要提供兩個索引作為邊界,第一個索引的元素是包含在分片內,而第二個則不包含在分片內,(3)序列相加使用“+”可以相加兩個序列,相加的兩個序列必須是同一種類型。創新與貢獻研究意義選題背景第八章8.2語言基礎(4)乘法用數字n乘以一個序列會生成新的序列,在新的序列中,原來的序列將會被重復n次,(5)成員資格in運算符用來檢查一個值是否在序列中,如果在就返回Ture,如果不在就返回False。(6)長度、最小值和最大值len()函數返回序列中所包含元素的數量,min()函數和max()函數分別返回序列中最大和最小的元素,創新與貢獻研究意義選題背景第八章8.2語言基礎8.2.6正則表達式正則表達式使用單個字符串來描述、匹配一系列句法規則,通常被用來檢索、替換某個模式的文本,是一種字符串處理的有力工具。正則表達式按照某種預定義的模式去匹配一類具有共同特征的字符串,主要用于字符串處理,可以快速準確地完成復雜的查找、替換等要求。Python提供了re模塊,可以完成正則表達式操作所需要的基本功能。
re模塊中正則表達式由元字符及其不同組合來構成,通過構造正則表達式可以匹配任意字符串,并完成復雜的字符串處理任務。re模塊提供了Perl風格的正則表達式模式,擁有全部的正則表達式功能。下面主要介紹re模塊中常用的正則表達式處理函數。創新與貢獻研究意義選題背景第八章8.2語言基礎1re.match函數re.match函數嘗試從字符串的起始位置匹配一個模式,如果匹配失敗,match()方法返回none,函數語法如下:re.match(pattern,string,flags=0)re.match函數的參數說明如表8-10所示。參數描述pattern匹配的正則表達式string要匹配的字符串flags標志位,用于控制正則表達式的匹配方式表8-10函數參數說明創新與貢獻研究意義選題背景第八章8.2語言基礎可以使用group()或groups()函數獲取匹配表達式,匹配對象的方法描述如表8-11所示。匹配對象方法描述group(num=0)匹配的整個表達式的字符串,可以一次輸入多個組號,返回一個包含組所對應值的元組。groups()返回包含所有小組字符串的元組。表8-11匹配對象方法描述創新與貢獻研究意義選題背景第八章8.2語言基礎2re.search方法re.search方法掃描整個字符串并返回第一個成功匹配的對象,語法格式如下:re.search(pattern,string,flags=0)re.match函數的參數說明如表8-12所示。參數描述pattern匹配的正則表達式string要匹配的字符串flags標志位,用于控制正則表達式的匹配方式表8-12search方法參數說明若匹配成功,re.search方法返回一個匹配的對象,否則返回None。創新與貢獻研究意義選題背景第八章8.3函數函數是一種組織好的、可重復使用的、用來實現單一或相關聯功能的代碼段。函數能提高應用的模塊性和代碼的重復利用率。Python不僅提供了許多內建函數,比如print()函數,用戶也可以自己創建函數完成某種特定功能。創新與貢獻研究意義選題背景第八章8.3函數8.3.1函數定義函數定義規則如下:1)函數代碼塊以def關鍵詞開頭,后接函數標識符名稱和圓括號()。2)任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以定義參數。3)函數的第一行語句可以使用文檔字符串,用于存放函數說明。4)函數內容以冒號起始,且需要縮進。5)Return語句結束函數,然后返回一個值給調用方,默認為None。函數定義語法格式如下:deffunctionname(parameter):function_suitereturn[expression]關鍵字def引出函數定義,后接函數名和用小括號括起來的一系列參數,最后是函數體。創新與貢獻研究意義選題背景第八章8.3函數8.3.2函數調用定義函數時給函數指定一個名稱,以及函數里包含的參數和代碼塊結構。當函數的基本結構完成后,可以通過另一個函數調用執行,也可以直接在提示符中執行。創新與貢獻研究意義選題背景第八章8.3函數8.3.3函數參數函數的輸入稱為參數,函數的輸出稱為返回值。參數傳遞是將實參賦值給形參的過程。實參可以是常量、變量或表達式,實參的類型與形參兼容。def是函數定義的關鍵字,冒號表示函數定義的開始。函數參數列表可以為空,也可以包含多個參數,參數之間使用逗號分隔。return語句返回函數的值并退出函數,返回值可以是任何數據類型。return語句是可選的,可以在函數體內任何地方出現,表示函數調用執行到此結束。如果函數中沒有return語句,則自動返回None。創新與貢獻研究意義選題背景第八章8.3函數函數參數的傳遞Python按值傳遞參數,當調用函數時,將常量或變量的值傳遞給函數的參數。實參是指函數調用時傳遞進去的參數值,Python實參分為關鍵字實參和位置實參。關鍵字實參是在調用函數時,以name=value的形式傳遞參數,name就是參數的名字,也稱為形參;位置實參就是只傳遞value的形式,這要靠實參的位置來匹配形參,關鍵字參數必須位于位置參數之后。函數定義完成后,可以直接使用函數名調用函數,調用格式如下:函數名(實參列表)函數的實際參數按順序傳遞給函數的形式參數,然后執行函數體。創新與貢獻研究意義選題背景第八章8.3函數8.3.4返回值return語句退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None。8.3.5變量作用域變量起作用的范圍稱為變量的作用域,兩種最基本的變量作用域是全局變量和局部變量。變量定義在函數內部和外部,其作用域是不同的。全局變量與局部變量本質區別就是作用域不同。定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序范圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。創新與貢獻研究意義選題背景第八章8.4類Python是一門面向對象的語言,在Python中創建一個類和對象比較容易,本章節將介紹Python的面向對象編程。創新與貢獻研究意義選題背景第八章8.4類8.4.1類定義類的定義主要包括對象的屬性和方法。Python中類的聲明使用關鍵詞class,class之后是一個空格,然后是類的名字和冒號,最后換行并定義類的內部實現。類名的首字母一般要大寫,可以按照自己的習慣定義類名。類在定義時可以提供一個可選父類,如果沒有基類,那默認object作為基類。類的定義語法格式如下:class類名:成員變量成員函數創新與貢獻研究意義選題背景第八章8.4類類的所有實例方法都必須至少有一個名為self的參數,并且必須是方法的第一個形參,self參數代表將來要創建的對象本身。在類的實例方法中訪問實例屬性時需要以self為前綴,但在外部通過對象名調用對象方法時并不需要傳遞這個參數,如果在外部通過類名調用對象方法則需要顯式為self參數傳值。屬于實例的數據成員一般是指在構造函數__init__()中定義的,定義和使用時必須以self作為前綴,屬于類的數據成員是在類中所有方法之外定義的。在主程序中,實例屬性只能通過對象名訪問,而類屬性可以通過類名或對象名訪問。創新與貢獻研究意義選題背景第八章8.4類8.4.2類方法在類中定義的方法可以粗略分為四大類:公有方法、私有方法、靜態方法和類方法。公有方法、私有方法都屬于對象,私有方法的名字以兩個下劃線“__”開始。每個對象都有自己的公有方法和私有方法,在這兩類方法中可以訪問屬于類和對象的成員。公有方法通過對象名直接調用,私有方法不能通過對象名直接調用,只能在屬于對象的方法中通過self調用或在外部通過Python支持的特殊方式來調用。如果通過類名來調用屬于對象的公有方法,需要顯式為該方法的self參數傳遞一個對象名,用來明確指定訪問哪個對象的數據成員。靜態方法和類方法都可以通過類名和對象名調用,但不能直接訪問屬于對象的成員,只能訪問屬于類的成員,靜態方法可以沒有參數。創新與貢獻研究意義選題背景第八章8.4類8.4.3繼承與多態1繼承繼承是為代碼復用和設計復用而設計的,是面向對象程序設計的重要特性之一。在繼承關系中,已有的、設計好的類稱為父類或基類,新設計的類稱為子類或派生類。派生類可以繼承父類的公有成員,但是不能繼承其私有成員。Python支持多繼承,如果父類中有相同的方法名,而在子類中使用時沒有指定父類名,則Python解釋器將從左向右按順序進行搜索。單繼承語法格式如下:class<類名>(父類名)<語句>多繼承語法格式如下:class類名(父類1,父類2,....,父類n)<語句1>創新與貢獻研究意義選題背景第八章8.4類2多態多態是指基類的同一個方法在不同派生類對象中具有不同的表現和行為。派生類繼承了基類行為和屬性之后,還會增加某些特定的行為和屬性,同時還可能會對繼承來的某些行為進行一定的改變,這都是多態的表現形式。Python大多數運算符可以作用于多種不同類型的操作數,并且對于不同類型的操作數往往有不同的表現,是通過特殊方法與運算符重載實現的。創新與貢獻研究意義選題背景第八章8.4類8.4.4應用舉例下面通過一個簡單的學生教師類示例介紹類的定義和使用。1定義類定義類是通過class關鍵字,class后面緊接著是類名,即Student,類名通常是大寫開頭的單詞,緊接著是(object),表示該類是從哪個類繼承下來的。通常,如果沒有合適的繼承類,就使用object類,這是所有類最終都會繼承的類。創建類時,可以定義一個特定的方法,名為__init__(),只要創建這個類的一個實例就會運行這個方法。可以向__init__()方法傳遞參數,這樣創建對象時就可以把屬性設置為希望的值,__init__()這個方法會在創建對象時完成初始化,同時第一個參數必須為self。創新與貢獻研究意義選題背景第八章8.4類首先定義Student類:classStudent(object):def__init__(self,sno,sname,ssex,sage,sdatamaing):self.sNo=snoself.sName=snameself.sSex=ssexself.sAge=sageself.sDataMaing=sdatamaingsNO表示學號,sName表示姓名,sSex表示性別,sAge表示年齡,sDataMaing表示數據挖掘課的成績。創新與貢獻研究意義選題背景第八章8.4類然后定義Teacher類:classTeacher(object):def__init__(self,tno,tname,tsex,tage,title):self.tNo=tnoself.tName=tnameself.tSex=tsexself.tAge=tageself.tTitle=titletNO表示教師工號,tName表示教師姓名,tSex表示教師性別,tAge表示教師年齡,tTitle表示職稱。創新與貢獻研究意義選題背景第八章8.4類2類方法成員(1)Student類:getNo()獲得學生學號;defgetNo(self):return(self.sNo)getName()獲得學生姓名;defgetName(self):return(self.sName)getSex()獲得學生性別;defgetSex(self):return(self.sSex)getAge()獲得學生年齡;defgetAge(self):return(self.sAge)getDataMaing()獲得學生數據挖據課的成績;defgetDataMaing(self):return(self.sDataMaing)創新與貢獻研究意義選題背景第八章8.4類(2)Teacher類:getNo()獲得教師工號;
defgetNo(self):return(self.tNo)getName()獲得教師姓名;defgetName(self):return(self.tName)getSex()獲得教師性別;defgetSex(self):return(self.tSex)getAge()獲得教師年齡;defgetAge(self):return(self.tAge)getTitle()獲得教師職稱;defgetTitle(self):return(self.tTitle)創新與貢獻研究意義選題背景第八章8.4類3類實例定義好了Student類,就可以根據該類創建出Student的實例,創建實例是通過類名+()實現的。a=Student("201102064","李明","男","22","94")以上代碼創建一個學生實例,學號201102064,姓名李明,性別男,年齡22,數據挖掘成績94。print(a.getNo())print(a.getName())print(a.getSex())print(a.getAge())print(a.getDataMaing())輸出結果為:201102064李明男2294創新與貢獻研究意義選題背景第八章8.4類創建一個教師實例,工號為20010513,姓名為張正,性別男,年齡51,職稱為教授。b=Teacher("20010513","張正","男","51","教授")print(b.getNo())print(b.getName())print(b.getSex())print(b.getAge())print(b.getTitle())輸出結果:20010513張正男51教授創新與貢獻研究意義選題背景第八章8.4類4類對象創建6個學生類的對象,輸出每個學生的信息,計算并輸出這6個學生數據挖據課的成績,以及計算并輸出數據挖據課的成績的平均成績、最高成績、最低成績。首先創建6個學生實例:s1=Student("201602001","李明","男","22",94)s2=Student("201602002","張亮","男","22",86)s3=Student("201602003","趙紅","女","21",99)s4=Student("201602004","李鵬","男","22",91)s5=Student("201602005","孫明","男","23",84)
然后創建一個學生列表,將六位學生信息放入列表中:Stu=[s1,s2,s3,s4,s5]創新與貢獻研究意義選題背景第八章8.4類使用for循環輸出每位學生的信息,使用類方法獲得學生的信息:forninrange(0,5):print(Stu[n].getNo()+Stu[n].getName()+Stu[n].getSex()+Stu[n].sAge+str(Stu[n].getDataMaing()))其中getDataMaing()返回為int類型,需要強制轉換為str類型。輸出結果為:201602001李明男2294201602002張亮男2286201602003趙紅女2199201602004李鵬男2291201602005孫明男2384創新與貢獻研究意義選題背景第八章8.4類直接調用類成員sDataMaing獲得每位學生的成績,使用循環計算學生的平均成績:total=0forninrange(0,5):total=Stu[n].sDataMaing+totalaverage=total/5Print("平均成績為:")print(average)
最終輸出結果為:平均成績為:90.8
創新與貢獻研究意義選題背景第八章8.4類計算所有學生中的最高成績:forninrange(0,5):if(Stu[n].sDataMaing>mix):mix=Stu[n].sDataMaingprint("最高成績為:")print(mix)輸出結果為:
最高成績為:99計算所有學生中的最低成績:
forninrange(0,5):if(Stu[n].sDataMaing<mix):mun=Stu[n].sDataMaingprint("最低成績為:")print(mun)輸出結果為:
最低成績為:84創新與貢獻研究意義選題背景第八章8.4類5類繼承在學生類Student和教師類Teacher基礎上,再派生出一個助教類TeachAssistant,一個助教同時具有教師和學生的特征,并增加屬性工資wage。TeachAssistant類同時繼承學生類student和教師類Teacher,繼承允許子類從父類那里獲得屬性和方法,同時子類可以添加新方法或者重載父類中的任何方法。classTeachAssistant(Teacher,Student):def__init__(self,tno,tname,tsex,tage,title,sdatamaing,wage):Teacher.__init__(self,tno,tname,tsex,tage,title)Student.__init__(self,tno,tname,tsex,tage,sdatamaing)self.Wage=wage創新與貢獻研究意義選題背景第八章8.4類TeachAssistant類的__init__方法同時繼承Student類和Teacher類的__init__構造方法,同時具有自己獨特的屬性wage,然后創建一個TeachAssistant類實例:d=TeachAssistant("20090511","王梅","女","30","助教",0,5000)print(d.tName)print(d.sName)輸出結果都為王梅,可知TeachAssistant同時繼承了父類的tName屬性與sName屬性。
print(d.getTitle())print(d.getDataMaing())輸出結果為:助教0??芍猅eachAssistant類又分別繼承了父類的getTitle()方法與getDataMaing
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (新)駕駛員(押運員)聘用合同(2026版)
- 滁州市瑯琊區消防救援局政府專職消防員招聘筆試真題2025
- 資料員聘用合同書(2026版)
- 2026 年山區暴雨來臨安全避險知識宣講
- 2026年暑期小學學生五育五心作業清單材料
- 統編教材必修下冊小說單元設計-賞析題目和環境
- 2026年感染性疾病科病區院感防控護理科普
- 初中英語七年級單詞知識梳理詞匯句式精講
- 銅業公司研發準則
- 某建材廠銷售管理制度
- 2026年學校食堂期初食品安全全員培訓課件(開學專用)
- 2025-2026學年成都市青羊區八年級下英語期末零診試題(含答案)
- 公共游覽場所服務員專項知識考試復習題庫(附答案)
- GB/T 47587-2026航空航天用1 550 MPa鎳基合金MJ螺紋螺栓技術規范
- 購買視頻素材協議合同
- 2026中考文綜終極背誦手冊-道德與法治+歷史+地理(人教版)
- 《JBT 13671-2019雙輥刀盤式剪切破碎機》專題研究報告
- 2026年黨的理論知識競賽試題庫及答案
- 鄉政協聯絡處工作制度
- 陶瓷質量考核獎懲制度
- 2026年浙江省杭州市技能人才評價考評員考試題庫及答案
評論
0/150
提交評論