天天看點

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

點選檢視第一章 點選檢視第三章

第2章

Python基礎知識

世界上大多數計算機語言是C-like語言,其基礎文法與C語言非常相似。Python是C-like語言的一種,同時又是一門解釋型語言。Python的設計原則是優雅、簡單,是以Python有不少同C語言差異較大的文法規則。基于此,本章将全面介紹Python的基礎知識,包括固定文法、運算符、資料類型、輸入輸出操作及檔案I/O等。

2.1 固定文法

正如每種自然語言都有各自的文法,計算機語言同樣依賴文法規則支撐起自身體系。程式設計基本規範由一些簡明的文法确定,可以稱之為固定文法。Python固定文法與多數程式設計語言相似,但也有其特殊之處,正是這些特殊之處形成了Python語言的特色。本節主要介紹的内容包括:聲明、注釋、縮進、多行語句、保留字元和指派等。

2.1.1 聲明與注釋

1.聲明

在Python的2.x版本中,預設的編碼格式是ASCII格式。ASCII是一種單位元組的編碼,編碼技術在起步時期隻使用英文字元,使用單位元組足以表示所有的英文字元及控制符号,總共256個字元。源代碼檔案隻要用到非ASCII字元,必須在檔案頭部進行字元編碼聲明。在字元編碼聲明中,Python隻檢查“#”“coding”和編碼字元串,其他字元是可變的。

ASCII最多隻能表示256種字元,是以産生了無法回避的問題:不足夠表示國際上衆多的字元。Unicode(萬國碼)在1994年應運而生,這種統一編碼規定了每個字元的對應關系,UTF-8、GB2312等常用的編碼格式就是按照Unicode規定的。

Python更新到3.x版本後,預設編碼格式變更為UTF-8。在這一格式下,世界上大多數語言的字元可以得到準确的編譯,一般不需要做字元編碼聲明。多數情況下,系統通過Python執行檔案不會出錯。但如果編輯器不支援UTF-8格式的檔案,或者後來又使用了其他的編碼格式,Python就無法自動識别腳本檔案,會造成程式執行出錯。這時,對Python腳本檔案進行編碼聲明就顯得尤其重要了。

要為源檔案指定特定的字元編碼格式,需要在檔案的首行或第2行插入一行注釋,稱為編碼聲明。這一聲明必須放在首行或第2行的原因是:注釋行都是以#号開頭的,不會被機器編譯。編碼聲明雖然不屬于注釋行,但同樣以#号開頭,可能會被機器誤識别為注釋,隻有放在首行或第2行的位置,才能被機器正常識别并編譯。編碼聲明的格式如下。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

通過這一聲明,源檔案中的所有字元都被當作coding指代的UTF-8編碼對待。

編寫Python腳本時,除聲明編碼格式外,常常也會加上一個路徑聲明。路徑聲明的格式如下。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

路徑聲明指出了系統執行py檔案時,調用的是/usr/bin下的Python解釋器。路徑聲明一般放在腳本首行。

2.注釋

代碼的注釋是指使用文字對代碼進行說明,注釋隻用于向程式設計人員展示代碼資訊,編譯器則自動忽略注釋的内容。在代碼中添加注釋可提高程式的可讀性,注釋中包括了程式的邏輯結構資訊,可以幫助程式員更好地閱讀和了解程式。在實際的程式設計工作中,常常需要浏覽成千上萬行晦澀難懂的代碼,如果代碼中缺少合理的注釋,即使是作者本人在一段時間之後也未必能輕易了解每行代碼的含義。是以,對代碼進行合理的注釋是一種良好的程式設計習慣。

Python中對代碼注釋的方法包括單行注釋和多行注釋。

單行注釋以#号開頭,#号後到換行前之間的所有字元都是注釋部分,如下所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

程式設計中常常有多行注釋的需求,多行注釋同樣可以使用#号,在每一行前都需要加上#号。使用#号進行多行注釋如下所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

雖然上述方法足以進行多行注釋,但Python中還有一種更加友善、優雅的多行注釋方法,即通過3個單引号(′′′)或3個雙引号(″″″)将注釋對象括起來。使用引号進行多行注釋時,需要保證前後使用的引号類型一緻。使用3個引号進行注釋,如下所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.1.2 縮進與多行語句

1.縮進

代碼行首的空白稱為縮進,可用4個空格或制表符建立。Python的一大特色就是用縮進的方式辨別代碼結構,而Java和C++等語言則使用大括号{}。Python使用縮進辨別代碼結構的方式使得代碼更加簡潔優雅。

使用縮進方式辨別代碼結構時,同一代碼塊内的語句必須有相同的縮進空格數,否則就會出錯。縮進的長度沒有硬性要求,保持同層次結構一緻即可,但也推薦使用4個空格進行縮進。正确的縮進方式如代碼清單2-1所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

縮進空格數不一緻,會導緻代碼運作出錯,如代碼清單2-2所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.多行語句

編寫代碼時,通常應在一行内完成一條語句,但太長的語句顯得冗長,可讀性差。用反斜杠()可以實作長語句的換行,且不會被機器識别成多個語句,如代碼清單2-3所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

需要注意,在[]、{}、()等不同括号内,多行語句換行時不需要使用反斜杠(),直接換行即可,如代碼清單2-4所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

除了将一個語句拆分為多行外,Python也支援在一行中實作多個語句,這通常隻用于多個短語句。在一行中實作多個語句需要使用分号(;)将短語句隔離,如代碼清單2-5所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.1.3 保留字元與指派

1.保留字元

Python中的辨別符是指變量、函數、類、子產品及其他對象的名字,可以包含字母、數字和下劃線(_),但必須以非數字字元開始。特殊符号,如$、%、@等,不能用在辨別符中。辨別符對大小寫敏感,比如“UFO”和“ufo”就是兩個不同的對象。

保留字元即關鍵字,是程式設計語言中已經定義過的字元。輸入查詢保留字元的指令,即可擷取保留字元名單。Python不允許将保留字元用作辨別符,這些字元不能再作為一般辨別符。在代碼中使用保留字元,可能會提示錯誤。保留字元的查詢及“保留”的意義如代碼 清單2-6所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.指派

Python中的指派方式有4種,除最基本的指派形式外,還有序列指派、連結指派和增量指派等方式。

指派的最基本形式是以等号(=)為連接配接,将要指派的變量放在等号左側,将要賦給的值放在等号右側,如代碼清單2-7所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

序列指派的基本形式是将多個變量排列成變量序列,變量之間使用逗号相連,使用等号作為指派符号,後接值序列,值之間用逗号相連。序列指派在變量序列與值序列之間建立了依次映射的關系,其基本形式如代碼清單2-8所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

連結指派的基本形式是将多個變量用等号相連,在末個變量後用等号連接配接一個指派。連結指派隻适用于給多個變量賦予同一值的情況,又稱為多目标指派,其基本形式如代碼清單2-9所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

增量指派,又稱為增強指派,其基本形式是将原始指派語句改寫,去掉指派符号右側變量,将指派符号右側運算符挪至指派符号左側,形成新的運算式。增量指派需要通過指派運算符實作,Python的指派運算符将在2.2.2節介紹。增量指派是指派運算式的“增量寫法”,通過聲明變量、增量方式和增量數值完成指派(如運算式“x=100”,其變量是x,增量方式是,增量數值是100)。

增量指派的優勢在于可以減少輸入代碼的工作量,其基本形式如代碼清單2-10所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.2 運算符

運算這一概念起源于數學,即通過運算法使參與運算的元素得出确定且可重複的結果。作為計算機的核心功能,運算架構起計算機系統的邏輯體系。計算機運算并不局限于普通的數學計算,它更貼近于“邏輯推算”這一概念,其根本目的就是實作邏輯推算。

運算符是運算法則的具體展現。Python提供了算術運算符、指派運算符、比較運算符、邏輯運算符、位運算符、身份運算符和成員運算符7類運算符,進而實作了豐富多樣的運算功能。

2.2.1 算術運算符

算術運算符是對運算數進行算術運算的一系列符号,能夠滿足一般的運算需求。Python中的算術運算符如表2-1所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

算術運算結果的數字類型與運算數的類型有關。進行除法(/)運算時,不管商為整數還是浮點數,運算結果始終為浮點數。要得到整型的商,需要用雙斜杠(//)做整除,且除數必須是整型的。對于其他的運算,隻要任一運算數為浮點數,運算結果就是浮點數。Python算術運算的基礎使用方法如代碼清單2-11所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.2.2 指派運算符

指派運算符用于變量的指派和更新。Python的指派運算符除基礎指派運算符(=)外,還包括加法指派運算符、減法指派運算符等。嚴格地說,除基礎指派運算符外,其他都屬于特殊的指派運算符。Python中的指派運算符如表2-2所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

表2-2中的特殊指派運算符可以看作變量的快速更新,更新意味着該變量是存在的,而對于一個之前不存在的變量,不能使用特殊的指派運算符。Python指派運算的基礎使用方法如代碼清單2-12所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.2.3 比較運算符

比較運算符用于對比數之間的大小或是否相等。Python中的比較運算符如表2-3所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

比較運算符也可用于字元之間的比較。Python中的字元使用ASCII編碼,每個字元都有屬于自己的ASCII碼,字元比較的本質是字元ASCII碼的比較。Python比較運算的基礎使用方法如代碼清單2-13所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.2.4 邏輯運算符

邏輯運算即判斷事物之間的“與”“或”“非”關系,Python中的邏輯運算符包含and、or、not,如表2-4所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

Python邏輯運算的基礎使用方法如代碼清單2-14所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.2.5 按位運算符

十進制數被人們廣泛使用,但對于計算機而言,二進制數反而是更重要的,計算機的一切計算都建立在二進制數計算的基礎上。按位運算是一種将十進制數轉為二進制數再進行運算的過程。Python中的位運算符如表2-5所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

Python按位運算的基礎使用方法如代碼清單2-15所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

在按位運算中,取反運算較難了解,因為涉及補碼的計算。

十進制數的二進制原碼包括符号位和二進制值。以“60”為例,其二進制原碼為“00111100”,第1位為符号位,0代表正數,1則代表負數。正數的補碼與二進制原碼相同,負數的補碼則為二進制原碼符号位保持不變,其餘各位取反後再在最後一位上加1。

取反操作可以總結為以下5個步驟。

1)取十進制數的二進制原碼。

2)對原碼取補碼。

3)補碼取反(得到最終結果的補碼)。

4)取反結果再取補碼(得到最終結果的原碼)。

5)二進制原碼轉十進制數。

2.2.6 身份運算符

身份運算符用于比較兩個對象的儲存機關,如表2-6所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

Python身份運算的基礎使用方法如代碼清單2-16所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

在身份運算中,記憶體位址相同的兩個變量進行is運算時,傳回True;記憶體位址不同的兩個變量進行is not運算時,傳回True。當a、b擷取到一樣的值時,兩個變量就擷取同樣的記憶體位址。

2.2.7 成員運算符

成員運算符的作用是判斷某個指定值是否存在某一序列中,包括字元串、清單和元組,如表2-7所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

Python成員運算的基礎使用方法如代碼清單2-17所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.2.8 運算符優先級

在Python中,運算符操作很常見,運算通常以表達式的形式進行。表達式由運算符和運算數組成,比如“1+2”就是一個表達式,其中的“+”是運算符,“1”和“2”則是運算數。一個表達式往往包含不止一個運算符,當一個表達式中存在多個運算符時,就需要考慮運算的順序,即運算符的優先級。

運算符的優先級如表2-8所示,優先級從上往下依次降低,同一優先級的運算符按從左到右的順序進行運算。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

運算符優先級的基礎使用方法如代碼清單2-18所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.3 資料類型

計算機内部的所有資料都可以看作對象,變量在程式中起到指向資料對象的作用,變量指派其實是把資料對象和變量關聯起來的過程。Python中的常用資料量類型有6種:number、str、list、tuple、dict和set。其中,number和str屬于基礎資料類型,而list、tuple、dict和sets屬于複合資料類型。

2.3.1 基礎資料類型

1.number

number又稱數字,是專門用于儲存數值的資料類型,具有不可改變性。資料的不可改變性意味着:每改變一個資料的類型,計算機就配置設定記憶體空間以建立新的對象,解釋器則基于資料的類型配置設定指定的記憶體,決定什麼樣的資料可以被儲存在記憶體中。要“改變”不可改變的資料類型,隻能通過創造新變量的間接方式。number既是複合型資料中的基本元素,也是數學計算的基本元素,計算機的一切數學計算工作都離不開它。

Python支援4種不同的數字資料類型,如表2-9所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

int隻有整數部分,即整型數。int僅表示廣為使用的十進制整數,如果需要用到二進制數、八進制數和十六進制數,需要分别通過bin函數、oct函數和hex函數進行建立或轉換。在Python 2中,用long表示長整型數,其特征是以L為字尾。長整型數和短整型數同屬于整數,差別在于:短整型數的範圍是[-2417483648,2417483647],長整型數的範圍是[-263,263-1]。Python 3不再保留長整型數,以int統一表示整數。

float是既有整數部分也有小數部分的數值類型,即浮點型數字。

complex是由實部(real)和虛部(imag)組成的數值類型,即複數。複數的實部和虛部都是浮點數。

bool表示布爾值,隻有True(1)和False(0)兩種取值。因為bool繼承了int類型,是以True可以等價于數值1,False可以等價于數值0,bool值可以直接用于數學運算。

給變量指定一個數值時,number對象就被建立,并在記憶體中配置設定儲存空間。通過type函數可以判斷number對象的類型。number建立和查詢類别的方式如代碼清單2-19所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

不同number類型通過函數可以互相轉換,使用代表number類型的函數即可。也可以進行混合運算,運算時先自動轉換成同一類型,然後再進行運算。轉換遵守一定的方向:int向f?loat轉換,非complex向complex轉換,如代碼清單2-20所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.str

str又稱為字元串,是存放着Unicode字元序列,用于表示文本的資料類型。str可以由任何字元構成,包括字母、數值、符号或标點符号以及它們的任意組合,如“Hello,word!”“1+1”等。與number相同的是,Python中的str也是不可變的,無法直接修改str中的某一位字元。

建立一個str,除字元外,還要在字元序列的首尾加上引号。使用單引号(')、雙引号('')是等效的,但需要保證str兩端的引号類型相同。如果要指定一個多行的str,則需要使用三引号(''')。

str支援索引,索引一般按照“變量[下标]”和“變量[頭下标:尾下标]”兩種格式處理,其中的“變量[下标]”格式能夠索引單個數值,“變量[頭下标:尾下标]”格式能夠進行切片(索引連續一片元素)。索引的具體規則如下:

1)下标為正數時,最小為0,表示第1位。下标最大為總字元數減1,表示最後一位。

2)下标為負數時,下标最小為總字元數的相反數,表示第1位。尾下标最大為-1,表示最後一位。

3)當進行切片時,索引從頭下标位置字元開始,到尾下标位置前一位字元終止。

4)在一個索引式中,頭下标與尾下标可以異号,但必須保證頭下标字元位置在尾下标字元之前。

5)頭下标留白,表示索引從第1個字元開始;尾下标留白,表示索引到最後一個字元結束。

除一般的索引格式外,str還支援按步長索引,即指定步長後,每隔固定的步數索引一次字元,其格式為“變量[頭下标:尾下标:步長]”。此外,通過“變量[::-1]”這一索引式可以将整個str反向排序。

str索引的基本操作如代碼清單2-21所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

str的索引方式對Python中其他支援索引的資料類型都具有參考價值。

盡管str不可變,但它其實有很好的可操作性。Python為str提供了極為豐富的内置方法,進而能實作多樣化的操作。

str中的所有方法中部分是用于查詢的,這些方法包括檢查str中是否包含某個對象,是否隻包含某個對象,某個對象是否在特定的位置,以及包含某個對象的個數。提供查詢功能的str方法如表2-10所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

str查詢相關的方法操作方式如代碼清單2-22所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

str方法除查詢外,還有對str進行改寫等操作的方法。改寫主要有兩種形式:對str中的制表符、空格等符号進行增删,且改變str的總長度;針對str中的字母,進行大小寫調整或替換。str改寫方法如表2-11所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

str改寫相關方法進行簡單操作,如代碼清單2-23所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

除查詢與改寫外,str方法還提供了一些其他功能,如表2-12所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

str其他方法操作示例如代碼清單2-24所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

轉義輸出是str操作中重要的内容,需要用到轉義字元。Python中常用的轉義字元如表2-13所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

除轉義輸出外,還可以使用+号與*号分别實作str的連接配接和重複操作。

str的轉義及連接配接、重複等基礎操作如代碼清單2-25所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.3.2 複合資料類型

計算機語言中的容器是指根據某種方式組合資料元素形成的資料元素集合。Python中的容器包含序列、映射和集合,幾乎所有的Python容器都可以歸結為這3類。

序列是資料對象的有序排列,資料對象作為序列中的元素被配置設定了一個位置編号(索引),序列相當于數學中數列的概念。Python中的序列包括str、list、tuple、Unicode字元串、buffer對象等,其中的str、list、tuple最為常用。

映射是包含一組鍵(key)和值(value)以及映射關系的容器,字典(dictionary)是Python中唯一的映射類型,字典中的每個元素都存在相應的名稱(稱為鍵)與之一一對應。字典相當于由帶有各自名稱的元素組成的集合,與序列不同的是,字典中的元素并沒有排列順序。

在集合類型資料中,集合中的元素不能重複出現,當中的元素是唯一的,元素間不存在排列順序,Python中的集合相當于數學中的集合概念。集合類型包括可變集合(set)與不可變集合(frozenset)。

1.list

list又稱為清單,屬于序列類資料,是包含0或多個對象引用的有序序列。由于list中所有的資料項都是對象引用,是以list可以存放任意資料類型的資料項,既可以是int、f?loat、str等這種基礎資料類型,也可以是list、tuple、dict等這一類的複合資料類型。list是Python中最通用的複合資料類型。

list可以用方括号“[ ]”建立:空的方括号建立空的list;包含多個項的list可以在方括号中使用逗号分隔的項序列建立。也可以通過list函數建立,list函數最多接收一個參數;不帶參數調用函數時傳回空list;帶參數時傳回參數的淺拷貝(在有指針的情況下,淺拷貝隻是增加了一個指針,指向已經存在的記憶體);對複雜參數(非基本元素,如複合資料類型)則嘗試将給出的對象轉換為list。list的建立如代碼清單2-26所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

索引、連接配接及重複操作是靈活運用list這一資料類型的基礎。list的這3種操作的方式和str對應操作類似,如代碼清單2-27所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

Python為list提供了一些内置方法,可以實作list的查詢、增删和排序等功能,如表2-14所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

表2-17所示的方法使用示例如代碼清單2-28所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.tuple

tuple又稱元組,與list同屬于序列類資料,是包含0個或多個對象引用的有序序列。與list不同的是,tuple是不可更改的資料類型。

tuple可以用圓括号( )建立:空的圓括号建立空的tuple;包含一個或多個項的tuple可以使用逗号分隔開元素;如果tuple内隻包含一個元素,需要在元素後加上逗号予以區分。有時,tuple必須被包含在圓括号中以避免語義二義性。例如,要将tuple(1,2,3)傳遞給一個函數,應該寫成function((1,2,3))的形式,以免被識别成“1,2,3”這3個數字變量。建立tuple的方法如代碼清單2-29所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

tuple支援索引,其索引方式與str、list類似。與list相同的是,tuple也可以進行連接配接、重複操作;與list不同的是,tuple中的元素無法做增删操作,隻能使用del函數删除整個tuple。tuple基本操作如代碼清單2-30所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

Python為tuple提供的内置方法較少,主要用于查詢,如表2-15所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

tuple内置方法的基本使用如代碼清單2-31所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

3.dict

dict又稱字典,屬于映射類資料。dict通過鍵而不是位置來索引。鍵是不可變對象(如number、str、tuple)的對象引用,值是可以指向任意類型對象的對象引用。dict是Python中唯一一種映射資料類型,具有可變性,dict的長度可以增大或減小,如同list一樣。dict的值可以無限制地取任何Python對象,既可以是Python内置的标準資料,也可以是使用者定義的。同一個鍵不允許出現兩次,建立dict時如果同一個鍵被指派兩次,隻有後一個值會被記住。鍵固定不變,是以隻能用number、str或tuple充當。注意,可變的資料類型不能充當dict中的鍵。

dict可以用花括号{}建立:使用空的花括号建立空的dict;非空的花括号包含一個或多個逗号分隔的項,每個項包含一個鍵、一個冒号以及一個值。通過dict函數也可以建立dict:不帶參數時傳回一個空的dict;帶一個映射類型參數時傳回以該參數為基礎的dict,當參數本身為dict時傳回該參數的淺拷貝;也可以使用序列型參數,前提是序列中的每個項是包含兩個對象的序列,第1個作為鍵,第2個作為值。建立dict,如代碼清單2-32所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

dict的主要索引方式是通過鍵索引值,這與str等變量截然不同。通過dict的索引功能,可以實作dict的查改增删,且不需要用到Python提供的内置方法,如代碼清單2-33所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

Python為dict提供了豐富的内置方法,通過内置方法也可以實作查詢、增删和建立,如表2-16所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

dict的常用操作示例如代碼清單2-34所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

4.set

Python中有兩種内置集合類型:set(可變集合)和frozenset(不可變集合)。set是引用零個或多個對象的無序組合,所引用的對象都是不可變的,所有内置的固定資料類型(如f?loat、frozenset、int、str、tuple)都是不可變的。以下所指的集合都是set。

set可以使用花括号{}或set函數建立。使用花括号{}建立集合時使用{}包裹一個或多個項,項與項間用“,”分割;空的set無法用{}建立。使用set函數建立set時,不帶參數時傳回空set;帶一個參數時傳回參數的淺拷貝;帶多個參數時,則嘗試将給定的對象轉換為set,如代碼清單2-35所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

set是可變的,但由于其中的項是無序的,是以沒有索引的概念。set可變而無法索引,這使得它無法進行查詢和修改元素的操作,但仍支援元素的增删,并可以清空和拷貝。set的常用操作基本都需要通過内置方法,如表2-17所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

set常用方法示例如代碼清單2-36所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

set起源于數學,與數學集合相似,Python中的set也有子集、并集、交集、差集和對稱差集等概念,并能進行集合運算,它們的定義和操作方法如表2-18所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

set集合運算的基本操作方法如代碼清單2-37所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.4 Python I/O

計算機程式用于執行任務,是滿足人類需求的工具。有資訊的輸入,程式才能接收指令、了解需求;有資訊的輸出,運作結果才能被回報給使用者。在程式設計中,資訊輸入操作稱為Input,輸出操作稱為Output,統稱為Input/Output,簡寫為I/O。

相比其他語言,Python中的I/O操作更加簡單友善,通過簡單的指令就可以實作基本的輸入輸出。此外,I/O并不僅僅指資訊鍵入和列印資訊,還包括檔案的輸入輸出。

2.4.1 input與print

1.input

input函數在用于互動式的資訊鍵入時,相當于一個容器,使用者從鍵盤輸入的資訊先存放在容器中,再被變量引用。

input函數可以接納多種資料類型,包括number、str等基礎類型,及list、tuple、dict、set等複合類型。使用input函數時,可以在括号内添加str以提示輸入。需要注意的是,Python 3.x中的input函數将所有接收的資料都預設為str,如代碼清單2-38所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

從代碼清單2-38的輸出結果可知,在str1變量中,盡管輸入的不是str,也被預設為str。要得到需要的資料類型,必須做類型轉換。

2.print

給一個變量指派後,如需查詢變量的内容,隻需要鍵入變量名并按Enter鍵即可,稱為表達式語句的輸出。使用print函數是更受歡迎的輸出方式,可以實作多樣化的輸出操作。

使用print函數進行輸出操作時,可以在函數的括号中插入str以向螢幕上輸出指定的文字,比如列印“hello,world!”的程式;要輸出被指派的變量,則在print函數的括号中插入變量名即可。

print函數也可以接收多個str,需要用逗号隔開,print函數會依次列印每個str,遇到逗号則輸出一個空格,是以輸出的str是拼起來的。print函數也可以自動計算結果,運作“print(number1+number2)”語句,解釋器會自動計算出相加的結果後輸出。print函數的應用如代碼清單2-39所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

格式化輸出是計算機輸出中的一個重要概念,主要針對str。其運作機制為:使用占位符在str中進行占位,再用數值或字元替換占位符,重組str後輸出。這種輸出方法主要是為了友善修改語句,減少編寫代碼的工作量,并且包含自動取位、轉換進制等功能。Python中的格式化輸出方法有兩種,即“%+格式符”的方法和format函數方法。

“%+格式符”的方法是一種較早的格式化輸出方法,使用方式是在百分号(%)後加上相應的格式符以占位,再進行替換和輸出。Python中的格式符如表2-19所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

由表2-19可知,Python中的格式符可分别用于str、整數和f?loat輸出。使用“%+格式符”的方法進行格式化輸出,如代碼清單2-40所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

format函數是更為強大的格式化輸出工具,format函數收集位置參數和關鍵字參數的任意集合,使用它們的值替換str中的占位符。該方法使用大括号({})作為特殊字元代替%,{}中可以不帶參數、帶數字編号或帶關鍵字編号進行占位和替換,前兩種屬于位置替換方法,後一種屬于關鍵字替換方法。

format函數也支援格式符,如表2-20所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

使用format函數進行格式化輸出的基本操作,如代碼清單2-41所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.4.2 檔案I/O

1.open

内置函數open的作用是打開一個檔案,建立一個f?ile對象以進行調用。在打開檔案的基礎上,後續的檔案讀寫操作才可以實作。open函數的基本文法格式如下:

open(filename, mode)

open函數常用的參數及其說明如表2-21所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

filename表示包含要通路的檔案名稱。mode決定打開檔案的模式,這個參數是非強制的,預設的檔案通路模式為隻讀(r),其可取值如表2-22所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

2.read

在Python中,讀取檔案的内容需要以隻讀的模式先打開一個檔案,可以用open函數傳入檔案名和模式辨別符,再用read函數讀取檔案中的内容。read函數可以從打開的檔案中一次性讀取全部内容,内容被讀取到記憶體并用一個str對象表示。read函數的基本文法格式如下:

f = open(filename, mode)

f.read(size)

read函數常用的參數及其說明如表2-23所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

表2-26中,size表示要從檔案中讀取的位元組數,該方法從檔案的開頭開始讀入,每調用一次就讀取size個位元組的内容。如果沒有傳入size,程式會嘗試盡可能多地讀取内容,一直到檔案的末尾。

使用read函數讀取test.txt檔案,并列印,如代碼清單2-42所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

3.write

在Python中,寫入檔案和讀出檔案的操作方式是相似的:先調用open函數并傳入辨別符‘w’或‘wb’,再使用write函數進行寫入。write函數的基本文法格式如下:

f.write(str)

write函數常用的參數及其說明如表2-24所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

write函數可将任何str寫入打開的檔案。需要注意,Python中的str可以是二進制資料,而不限于文字。要寫入str以外的内容,要先将需寫入的内容轉換成str。

使用write函數寫入檔案的操作如代碼清單2-43所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

4.close

close函數可以重新整理緩存裡任何還沒寫入的資訊并關閉檔案,關閉之後的檔案便不能再進行寫入。使用完檔案後應該關閉,關閉檔案的本質是使檔案指針與檔案脫離,關閉後不再能通過該指針對原來與其聯系的檔案進行操作。如果檔案使用完後不關閉,檔案對象會一直占用作業系統的資源,并且,作業系統同一時間能打開的檔案數量是有限的。寫入檔案時,資料會占用作業系統的記憶體,待計算機空閑時再慢慢寫入,不調用close函數的後果是資料可能隻寫一部分到磁盤中,其他的資訊則丢失了。

close函數的基本文法格式如下:

fileObject.close()

close函數常用的參數及其說明如表2-25所示。

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

本節的各代碼清單中,都需要在末尾使用close函數關閉檔案,以保證資訊的完整。

小結

Python可以實作快速開發,是最适合于機器學習的工具。本章介紹了利用Python進行程式設計的入門知識,主要内容如下:

1)固定文法主要介紹了Python的基本操作,包括聲明、注釋、縮進、多行語句、保留字元與指派等。

2)運算符部分主要介紹了算術運算符、比較運算符、指派運算符、按位運算符、邏輯運算符、成員運算符和身份運算符7類運算符的使用方法,并介紹了多個運算符時的優先級。

3)基礎資料類型主要介紹了number和str兩種資料類型,其中number包括int、float、bool、complex;str由引号辨別,操作方式多樣且靈活。

4)複合資料類型主要介紹了list、tuple、dict和set,需要注意各種資料類型之間的異同點,以及每種類型的基礎操作。

5)互動式的輸入操作主要介紹了基礎I/O和檔案讀寫。基礎I/O部分說明了input函數的用法、輸入資料類型和print函數的輸出格式化。檔案讀寫則說明了open、read、write、close四個函數分别實作打開、讀取、寫入、關閉操作。

課後習題

1.選擇題

(1)下列關于注釋的說法正确的是(  )。

A.單行注釋隻能使用#号建立

B.多行注釋隻能使用#号建立

C.使用引号建立注釋,須保證前後引号數目相同,類型不必一緻

D.注釋的主要目的在于使代碼美觀

(2)下列關于運算符的說法正确的是(  )。

A.算術運算符包括加、減、乘、除這4種

B.運算符“=”和運算符“==”是等效的

C.邏輯表達式x or y,x為False,則傳回x

D.指數運算符的優先級最高

(3)下列關于資料類型的說法正确的是(  )。

A.由于str是不可變的資料類型,是以隻有很少的内置方法

B.使用list.pop()可按對象删除list中的元素

C.隻包含一個元素的tuple必須帶上一個逗号

D.dict無法實作索引

(4)下列關于變量的說法不正确的是(  )。

A.Python 3中主要的整數資料類型有int和long

B.Python不支援查詢str中某個字元的位置

C.list可以存放任意資料類型,這是因為其内部的資料項都是對象引用

D.set引用的對象隻能是不可變的

(5)下列關于檔案操作的說法正确的是(  )。

A.open函數的w模式表示隻讀打開,隻能在檔案存在的情況下使用這一模式

B.使用read函數讀取檔案時,如果不設定讀取位元組數,程式将嘗試讀取所有内容

C.write函數可将任何str及數字寫入打開的檔案

D.操作檔案後必須使用close函數關閉是為了資訊安全

2.填空題

(1) 實作多行語句需要使用

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

,但在

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章
帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

内的長語句使用逗号即可。

(2)同一優先級運算符的運算順序是

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

(3)str内置方法的功能集中在

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

兩個方面。

(4)dict無法使用str式的索引格式,但支援

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

的形式。

(5)檔案在讀寫操作後必須

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

,以避免資訊儲存不完整。

3.操作題

(1)編寫可運作的代碼,聲明格式為“UTF-8”,計算

帶你讀《Python3智能資料分析快速入門》之二:Python基礎知識第2章

的運算結果是否在list[18,20,54]中。

(2) 使用兩種方法建立一個list,包含10086、10000、10010、中國移動、中國電信、中國聯通這6個元素。

(3)使用兩種方法建立一個tuple,包含China、Chinese、960、56、中國這5個元素。

(4)使用兩種方法建立一個dict,鍵為中國、美國,對應的值為China、America。

(5)使用兩種方法建立一個set,包含China、America、Russia、Germany、France。

(6) 讀取test.txt檔案,根據讀取的内容,做出解答,然後在該檔案末尾追加解答結果,并關閉檔案。