說明:本系列文章翻譯自 Python 3.5.0 官方文檔的 Python 語言參考愕掏。
下面是一個 Python內(nèi)建類型的列表麻敌。擴(kuò)展模塊(使用 C, Java 或其他語言,根據(jù)執(zhí)行情況)可以定義額外的類型。未來的 Python 版本可能會在類型層次上添加新類型(例如:有理數(shù)蜓竹,高效存儲的整型數(shù)組,等)储藐,通常會以 Python 標(biāo)準(zhǔn)庫的形式提供俱济。
有寫類型的描述會包含一段“特殊屬性”的列表。這些都是提供訪問實現(xiàn)的屬性钙勃,而不作為一般用途蛛碌。將來它們的定義可能會改變。
None
此類型只有一個值辖源。只有一個對象擁有此值蔚携,這個對象可以通過內(nèi)建的名稱
None
訪問。多數(shù)情況下克饶,它標(biāo)識一個不存在的值酝蜒,例如:當(dāng)一個函數(shù)不明確返回任何值時,可以返回None
矾湃。它的邏輯值是假亡脑。
NotImplemented
此類型只有一個值。只有一個對象擁有此值邀跃,這個對象可以通過內(nèi)建的名稱
NotImplemented
訪問霉咨。數(shù)值型方法和富比較方法如果不實現(xiàn)運算對象提供的運算應(yīng)該返回此值。(解釋器會基于操作符嘗試反射運算拍屑,或退卻[譯者注:計算機(jī)用語途戒,計算機(jī)在發(fā)生故障時,即使系統(tǒng)的一部分功能降低但仍能保持主要功能])僵驰。它的邏輯值是真喷斋。
詳細(xì)信息請查看算術(shù)運算符實現(xiàn)
省略號(Ellipsis)
此類型只有一個值裁蚁。只有一個對象擁有此值,這個對象可以通過
...
或內(nèi)建名稱Ellipsis
訪問继准。它的邏輯值為真枉证。
numbers.Number
它們由數(shù)值型的字面值船艦,并以算術(shù)運算符和內(nèi)置算術(shù)函數(shù)作為返回結(jié)果移必。數(shù)值型對象是不可變的室谚;一旦被創(chuàng)建,它們的值就不會改變崔泵。Python 的數(shù)字和數(shù)學(xué)上的數(shù)字是強(qiáng)相關(guān)秒赤,但受限于計算機(jī)的呈現(xiàn)能力。
Python 有整數(shù)憎瘸,浮點數(shù)和復(fù)數(shù)三種數(shù)字類型
numbers.Integral
代表數(shù)學(xué)集合中的整數(shù)(包括整數(shù)和負(fù)數(shù))
有兩種整數(shù)類型:
整型(
int
)整型表示無限大小的數(shù)字入篮,僅受限于可用的(虛擬)內(nèi)存。為了移位和掩碼操作幌甘,我們假設(shè)負(fù)數(shù)使用二進(jìn)制補(bǔ)碼的變種(一串無窮的左邊帶符號擴(kuò)展)表示潮售。
布爾型(
bool
)布爾型表示值的真假。只有值為
True
和False
的對象才是布爾型锅风。布爾型是整型的了類型酥诽,它的值的行為類似于0
和1
,例外情況是皱埠,在幾乎所有的上下文環(huán)境中肮帐,當(dāng)把布爾型對象轉(zhuǎn)化為字符串時,會對應(yīng)的返回False
或True
边器。整型表示的原則是训枢,給予移位和掩碼操作(包括負(fù)數(shù))最有意義的解釋。
numbers.Real(
float
)代表機(jī)器層雙精度浮點數(shù)忘巧。此值受基礎(chǔ)機(jī)器結(jié)構(gòu)(和 C 或 Java 的實現(xiàn))可接受范圍和溢出處理的約束恒界。Python 不支持單精度浮點數(shù);單精度在進(jìn)程和內(nèi)存使用上節(jié)省的空間被在 Python 中使用對象的開支抵消袋坑,所以沒有理由使用兩種精度讓 Python 變的復(fù)雜化仗处。
numbers.Complex(
complex
)復(fù)數(shù)使用一對機(jī)器層雙精度浮點數(shù)表示眯勾,與浮點數(shù)的說明一致枣宫。復(fù)數(shù)
z
的實數(shù)和虛數(shù)部分可以通過z
的兩個只讀屬性z.real
和z.imag
訪問。
序列(Sequences)
序列表示使用非負(fù)整數(shù)做為索引的有序集合吃环。 內(nèi)建函數(shù)
len()
返回一個序列的元素個數(shù)也颤。如果一個序列的長度是n,它的索引包含0, 1, ..., n-1郁轻。序列a
的第i個元素使用a[i]
來獲取翅娶。序列支持切片:如果索引用k表示文留,那么
a[i:j]
得到所有滿足i <= k < j
的元素。當(dāng)用在表達(dá)式中時竭沫,切片也是一個同類型的序列燥翅。這意味著索引會從0開始重新編號。一些序列通過第三個“步”參數(shù)支持“擴(kuò)展切片”:如果索引用x表示蜕提,
a[i:j:k]
得到所有滿足x = i + n*k
,n >= 0
和i <= x < j
的所有元素森书。序列通過可變性區(qū)分:
不可變序列
一個不可變的序列類型對象一旦被創(chuàng)建就不能改變。(如果包含其他對象的引用谎势,這些對象可能是可變的并且可能會發(fā)生變化凛膏;然而,不變對象對這些對象的直接引用是不能改變的脏榆。[譯者注:看來作者也認(rèn)為這是個難點啊猖毫,文中反復(fù)強(qiáng)調(diào)這點~~[戳這里看3.1章中的講解](http://www.reibang.com/p/4e77bedc546e)有譯者的例子哦])
以下的類型都是不可變序列:
字符串
字符串代表一序列的 Unicode 碼位的值。所有在
U+0000~U+10FFFF
的碼位都可以表示字符串须喂。Python 沒有char
類型吁断;在字符串中每一個碼位都代表一個長度為1
的字符串。內(nèi)建函數(shù)ord()
將字符串中的每個碼位轉(zhuǎn)換成整型坞生,取值范圍為0~10FFFF
胯府;chr()
一個取值范圍為0~10FFFF
的整型轉(zhuǎn)換成長度為1
的字符串。str.encode()
使用指定編碼將一個str
轉(zhuǎn)換成bytes
恨胚,bytes.decode()
可以實現(xiàn)相反操作骂因。元組
元組中的元素可以是 Python 中的任意對象。兩個以上元素的元組由逗號分隔的表達(dá)式(expression赃泡,譯者注:之所以使用這個詞是因為同一個元組中可以存放各種類型的數(shù)據(jù)寒波,下同)列表組成。一個元素的元組由一個表達(dá)式后跟一個逗號組成(單獨的一個表達(dá)式不能創(chuàng)建一個元組升熊,因為圓括號必須用來組合表達(dá)式)俄烁。一個空的元組可以用一對圓括號表示。
位元組
位元組對象是一個不可變數(shù)組级野。它的元素占8位字節(jié)页屠,用
0 <= x < 256
范圍內(nèi)的整數(shù)表示。位元組字面值(比如:b'abc'
)和內(nèi)建函數(shù)bytes()
可以用來創(chuàng)建位元組對象蓖柔。位元組對象也可以通過decode()
方法解碼成字符串辰企。可變序列
可變序列在被創(chuàng)建后可以改變。下標(biāo)和切片標(biāo)記可以被用于分配的目標(biāo)和
del
(delete)語句况鸣。存在兩個固有的可以序列類型:
列表
列表的元素是任意的 Python 對象牢贸。列表由在方括號內(nèi)用逗號分隔的表達(dá)式組成。(0個和1個元素的列表不需要特殊操作镐捧。)
字節(jié)數(shù)組
字節(jié)數(shù)組是一個可變數(shù)組潜索。通過內(nèi)建函數(shù)
bytearray()
構(gòu)造器創(chuàng)建臭增。除了是一個可變類型,字節(jié)數(shù)組另外提供了和不可變位元組對象相同的接口和函數(shù)竹习,也因此誊抛,字節(jié)數(shù)組類型具的不可哈希性。和
collections
模塊一樣整陌,擴(kuò)展的array
模塊提供了附加的可變序列類型的例子.
集合類型
表示無序的芍锚,元素唯一的不可變有限集合對象。它們不能使用下標(biāo)索引蔓榄。然而并炮,它們可以被迭代,內(nèi)建函數(shù)
len()
返回集合中的元素個數(shù)甥郑。集合常被用來全員測試逃魄,去重和數(shù)學(xué)上操作符運算(比如交集,并集澜搅,差分伍俘,對稱差分)。集合中的元素和字典的鍵遵守一樣的不可變性規(guī)則勉躺。需要注意癌瘾,數(shù)字類型遵守數(shù)字比較的通用規(guī)則:兩個數(shù)字比較結(jié)果是相等(比如:
1
和1.0
),它們中有一個會在集合中保留饵溅。集合有兩種固有的類型:
集(Sets)
一個可變集合妨退。通過內(nèi)建函數(shù)
set()
構(gòu)造器創(chuàng)建,可以通過一些方法蜕企,例如add()
咬荷,改變它。凍結(jié)集(Frozen sets)
一個不可變集合轻掩。通過內(nèi)建函數(shù)
frozenset()
構(gòu)造器創(chuàng)建幸乒。由于它的不可變性和可哈希性,它可以被用作另一個集合的元素唇牧,或字典的鍵罕扎。
映射(Mapping)
表示被任意索引集合索引的有限對象集合。下標(biāo)
a[k]
獲取到映射a
中被k
索引的元素丐重;可以用在表達(dá)式中腔召,分配給目標(biāo)或者del
語句。內(nèi)建函數(shù)len()
返回該映射的元素個數(shù)弥臼。映射中只有一種類型:
字典
字典表示被幾乎任意值索引的有限對象集合宴咧。只有一種類型的值不能作為字典的鍵:包含列表根灯,字典或其他可變類型的径缅,比較值而不是比較對象身份標(biāo)識的類型掺栅。因為字典的高效要求鍵的哈希值始終不變。數(shù)字類型作為鍵時遵守普通的數(shù)字比較規(guī)則:如果兩個數(shù)字的比較結(jié)果是相等(比如:
1
和1.0
)纳猪,那么它們都可作為同一個字典內(nèi)容的索引氧卧。字典是可變的;他們可以通過
...
符號創(chuàng)建(參考字典顯示章節(jié))氏堤。