[譯]Python 語言參考-3.2. 標準類型層次(上)

說明:本系列文章翻譯自 Python 3.5.0 官方文檔Python 語言參考

下面是一個 Python內建類型的列表。擴展模塊(使用 C, Java 或其他語言,根據執行情況)可以定義額外的類型。未來的 Python 版本可能會在類型層次上添加新類型(例如:有理數,高效存儲的整型數組,等),通常會以 Python 標準庫的形式提供。

有寫類型的描述會包含一段“特殊屬性”的列表。這些都是提供訪問實現的屬性,而不作為一般用途。將來它們的定義可能會改變。

None

此類型只有一個值。只有一個對象擁有此值,這個對象可以通過內建的名稱None訪問。多數情況下,它標識一個不存在的值,例如:當一個函數不明確返回任何值時,可以返回None。它的邏輯值是假。

NotImplemented

此類型只有一個值。只有一個對象擁有此值,這個對象可以通過內建的名稱NotImplemented訪問。數值型方法和富比較方法如果不實現運算對象提供的運算應該返回此值。(解釋器會基于操作符嘗試反射運算,或退卻[譯者注:計算機用語,計算機在發生故障時,即使系統的一部分功能降低但仍能保持主要功能])。它的邏輯值是真。

詳細信息請查看算術運算符實現

省略號(Ellipsis)

此類型只有一個值。只有一個對象擁有此值,這個對象可以通過...或內建名稱Ellipsis訪問。它的邏輯值為真。

numbers.Number

它們由數值型的字面值船艦,并以算術運算符和內置算術函數作為返回結果。數值型對象是不可變的;一旦被創建,它們的值就不會改變。Python 的數字和數學上的數字是強相關,但受限于計算機的呈現能力。

Python 有整數,浮點數和復數三種數字類型

numbers.Integral

代表數學集合中的整數(包括整數和負數)

有兩種整數類型:

整型(int)

整型表示無限大小的數字,僅受限于可用的(虛擬)內存。為了移位和掩碼操作,我們假設負數使用二進制補碼的變種(一串無窮的左邊帶符號擴展)表示。

布爾型(bool)

布爾型表示值的真假。只有值為TrueFalse的對象才是布爾型。布爾型是整型的了類型,它的值的行為類似于01,例外情況是,在幾乎所有的上下文環境中,當把布爾型對象轉化為字符串時,會對應的返回FalseTrue。

整型表示的原則是,給予移位和掩碼操作(包括負數)最有意義的解釋。

numbers.Real(float)

代表機器層雙精度浮點數。此值受基礎機器結構(和 C 或 Java 的實現)可接受范圍和溢出處理的約束。Python 不支持單精度浮點數;單精度在進程和內存使用上節省的空間被在 Python 中使用對象的開支抵消,所以沒有理由使用兩種精度讓 Python 變的復雜化。

numbers.Complex(complex)

復數使用一對機器層雙精度浮點數表示,與浮點數的說明一致。復數z的實數和虛數部分可以通過z的兩個只讀屬性z.realz.imag訪問。

序列(Sequences)

序列表示使用非負整數做為索引的有序集合。 內建函數len()返回一個序列的元素個數。如果一個序列的長度是n,它的索引包含0, 1, ..., n-1。序列a的第i個元素使用a[i]來獲取。

序列支持切片:如果索引用k表示,那么a[i:j]得到所有滿足i <= k < j的元素。當用在表達式中時,切片也是一個同類型的序列。這意味著索引會從0開始重新編號。

一些序列通過第三個“步”參數支持“擴展切片”:如果索引用x表示,a[i:j:k]得到所有滿足x = i + n*k, n >= 0i <= x < j的所有元素。

序列通過可變性區分:

不可變序列

一個不可變的序列類型對象一旦被創建就不能改變。(如果包含其他對象的引用,這些對象可能是可變的并且可能會發生變化;然而,不變對象對這些對象的直接引用是不能改變的。[譯者注:看來作者也認為這是個難點啊,文中反復強調這點~~[戳這里看3.1章中的講解](http://www.lxweimin.com/p/4e77bedc546e)有譯者的例子哦])

以下的類型都是不可變序列:

字符串

字符串代表一序列的 Unicode 碼位的值。所有在U+0000~U+10FFFF的碼位都可以表示字符串。Python 沒有char類型;在字符串中每一個碼位都代表一個長度為1的字符串。內建函數ord()將字符串中的每個碼位轉換成整型,取值范圍為0~10FFFF;chr()一個取值范圍為0~10FFFF的整型轉換成長度為1的字符串。str.encode()使用指定編碼將一個str轉換成bytesbytes.decode()可以實現相反操作。

元組

元組中的元素可以是 Python 中的任意對象。兩個以上元素的元組由逗號分隔的表達式(expression,譯者注:之所以使用這個詞是因為同一個元組中可以存放各種類型的數據,下同)列表組成。一個元素的元組由一個表達式后跟一個逗號組成(單獨的一個表達式不能創建一個元組,因為圓括號必須用來組合表達式)。一個空的元組可以用一對圓括號表示。

位元組

位元組對象是一個不可變數組。它的元素占8位字節,用0 <= x < 256范圍內的整數表示。位元組字面值(比如:b'abc')和內建函數bytes()可以用來創建位元組對象。位元組對象也可以通過decode()方法解碼成字符串。

可變序列

可變序列在被創建后可以改變。下標和切片標記可以被用于分配的目標和del(delete)語句。

存在兩個固有的可以序列類型:

列表

列表的元素是任意的 Python 對象。列表由在方括號內用逗號分隔的表達式組成。(0個和1個元素的列表不需要特殊操作。)

字節數組

字節數組是一個可變數組。通過內建函數bytearray()構造器創建。除了是一個可變類型,字節數組另外提供了和不可變位元組對象相同的接口和函數,也因此,字節數組類型具的不可哈希性。

collections模塊一樣,擴展的array模塊提供了附加的可變序列類型的例子.

集合類型

表示無序的,元素唯一的不可變有限集合對象。它們不能使用下標索引。然而,它們可以被迭代,內建函數len()返回集合中的元素個數。集合常被用來全員測試,去重和數學上操作符運算(比如交集,并集,差分,對稱差分)。

集合中的元素和字典的鍵遵守一樣的不可變性規則。需要注意,數字類型遵守數字比較的通用規則:兩個數字比較結果是相等(比如:11.0),它們中有一個會在集合中保留。

集合有兩種固有的類型:

集(Sets)

一個可變集合。通過內建函數set()構造器創建,可以通過一些方法,例如add(),改變它。

凍結集(Frozen sets)

一個不可變集合。通過內建函數frozenset()構造器創建。由于它的不可變性和可哈希性,它可以被用作另一個集合的元素,或字典的鍵。

映射(Mapping)

表示被任意索引集合索引的有限對象集合。下標a[k]獲取到映射a中被k索引的元素;可以用在表達式中,分配給目標或者del語句。內建函數len()返回該映射的元素個數。

映射中只有一種類型:

字典

字典表示被幾乎任意值索引的有限對象集合。只有一種類型的值不能作為字典的鍵:包含列表,字典或其他可變類型的,比較值而不是比較對象身份標識的類型。因為字典的高效要求鍵的哈希值始終不變。數字類型作為鍵時遵守普通的數字比較規則:如果兩個數字的比較結果是相等(比如:11.0),那么它們都可作為同一個字典內容的索引。

字典是可變的;他們可以通過...符號創建(參考字典顯示章節)。

collections模塊一樣,dbm.ndbmdbm.gnu擴展模塊提供了映射類型附加的例子。

請繼續閱讀:[譯]Python 語言參考-3.2. 標準類型層次(下)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容