本節書摘來自異步社群《python 3程式開發指南(第2版•修訂版)》一書中的第2章,第2.6節,作者[英]mark summerfield,王弘博,孫傳慶 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
本章首先展示了python的關鍵字清單,并描述了python辨別符的命名原則。由于python對unicode的支援,是以python辨別符不局限于來自小字元集(比如ascii或latin-1)的子集。
我們也描述了python的int資料類型,該類型與大多數其他語言中的類似類型有所差别,因為其沒有内在的大小限制。python整數的大小取決于記憶體可以允許的最大數字,操縱由數百個數字組成的數字也是完全可行的。python大多數基本類型都是固定的,但是實際上很少會有真正的影響,因為借助于增強的指派操作符(+=、*=、-=、/=以及其他),我們可以使用非常自然的文法,而在幕後,python會建立結果對象并将變量重新綁定到其上。整數字面值通常寫為十進制數,但也可以使用0b為字首寫為二進制字面值、使用0o為字首寫為八進制字面值、使用0x為字首寫為十六進制字面值。
在使用/對兩個整數進行除法操作時,所得結果總是一個浮點數,這與很多廣泛使用的其他語言是不同的,但有助于避免在除法操作進行削減時某些微妙的bug。(如果需要整數除法,可以使用//操作符。)
python有一種bool資料類型,其中可以存放true或false。python提供了3個邏輯操作符:and、or、not。其中,兩個二進制操作符(and與or)使用的是short-circuit邏輯。
python中有3種可用的浮點數:float、complex與decimal.decimal。最常用的是float,這是一個雙精度的浮點數,其準确的數值型特征依賴于python建構是使用的底層c、c#或java庫。複數使用兩個浮點數表示,一個存放的是實數部分,另一個存放的是虛數部分。decimal.decimal類型是由decimal子產品提供的,這種數字預設小數點後有28位的精度,但可以根據需要增加或減少。
所有三種浮點類型都可用于适當的内置的數學操作符與函數。此外,math子產品提供了各種三角函數、雙曲線函數與對數函數,可用于處理浮點數;cmath子產品提供了類似的函數集,可用于處理複數。
本章大部分内容都針對的是字元串。python的字元串字面值可以使用單引号或雙引号建立,或使用三引号包含的字元串(如果需要在其中包含換行與引号,不拘形式)。各種轉義序列可用于插入特殊字元,比如制表符(t)與換行(n),也可以插入unicode字元(使用十六進制轉義與unicode字元名)。雖然字元串也支援其他python類型的相同的比較操作符,但是我們也注意到,包含非英語字元的字元串排序時容易出現問題。
由于字元串是序列,是以,通過簡單但強大的文法,分片操作符([])也可以用于字元串分片與步距。字元串也可以使用+操作符連接配接,使用操作符複制,我們也可以使用這兩個操作符的增強指派版本(+=與=)(盡管str.join()方法更常用于連接配接)。字元串有很多方法,包括有些用于測試字元串屬性的(比如str.isspace()與str.isalpha()),有些用于改變字母大小寫的(比如str.lower()與str.title()),有些用于搜尋的(比如str.find()與str.index()),還有很多其他方法。
python對字元串的支援是非常優秀的,使得我們可以友善地搜尋、提取、比較整個字元串或部分字元串,替換字元或字元串,或者将字元串分割為子字元串清單,或者将字元串清單連接配接為一個單一的字元串。
或許功能最豐富的字元串方法是str.format(),該方法用于使用替換字段與變量來建立字元串,并使用格式化規約來精确地定義每個字段(将被某個值替代)的特性。替換字段名稱文法允許我們使用位置參數或名稱(用于關鍵字參數)來存取方法的參數,也可以使用索引、鍵或屬性名來存取參數項或屬性。格式化規約允許我們制定填充字元、對齊方式以及最小字段寬度。而且,對于數字,我們可以控制其符号的輸出方式;對于浮點數,我們可以指定小數點後的數字個數,以及使用标準表示還是指數表示。
我們也讨論了字元編碼的複雜問題。預設情況下,python的.py檔案使用unicode utf-8編碼,是以可以包含注釋、辨別符以及數字(可以以任何人類語言寫入)。使用str.encode()方法,可以将字元串轉換為使用特定編碼表示的位元組序列。目前使用的字元編碼的廣泛性有時會帶來不便,但是utf-8正在迅速成為普通文本檔案的事實上的标準(也已成為xml檔案的預設編碼),是以,這種不便在将來會逐漸消減。
除了本章講述的資料類型之外,python還提供了兩種内置的資料類型,即bytes與bytearray,兩者都将在第7章講述。python還提供了幾種組合資料類型,有些是内置的,有些是來自标準庫的。在下一章中,我們将了解python最重要的幾種組合資料類型。