Python中基本內置類型由數字、序列、映射、類、實例和例外。一些集合類是可變的,因此那些可以增添、刪除或排列這些類的方法不會奏效,只會返回None,用來示意函數調用者邏輯上的錯誤。但同時,幾乎所有操作都支持幾種典型的函數操作,比如說:比較、真值測試以及用str()或repr()函數轉化爲字符串。總而言之,瞭解Python內置的類型有助於編程者使用這門語言進行各類開發測試工作。
1.真值測試
所有的對象都支持真值測試,真值測試可以使用if或while語句,也可以使用布爾操作符進行。該語言默認,一個對象應該具有True的屬性,除非該類在被調用時使用__bool__()方法返回了False或者使用__len__()方法返回了數字0。一般來講,以下的內置對象唄認爲具有False屬性:
(1)被定義具有False屬性的常量:None與False;
(2)任何數字類型中的0:0,0.0,0j,Decimal(0),Fraction(0);
(3)空的序列或集合:’’,(),[],{},set(),range(0)。
操作和內置函數通常返回0或False表示其具有False屬性,返回1或True表示其具有True屬性。但有一個及其重要的例外:布爾操作中的or和and總是返回它們自己所有的一個操作數以表明自己的布爾屬性。
2.布爾操作:and、or與not
操作 | 實現流程 |
x or y | 如果x是真,直接返回x; 如果x是假,返回y(結合上文思考) |
x and y | 如果x爲真,返回y; 如果x爲假,直接返回x。 |
not x | 如果x爲假,返回False; 如果x爲真,返回True。 |
not是一個低優先級的操作(優先級低於非布爾操作),例如:not x==y 語句等價於 not (x==y),並且x == not y 這個用法會導致索引錯誤。
3.比較
Python中有八種比較操作,這些比較操作具有相同的優先級。,下表列出具體的操作符號:
操作 | 操作含義 |
< | 嚴格小於 |
<= | 小於或等於 |
> | 嚴格大於 |
>= | 大於或等於 |
== | 等於 |
!= | 不等於 |
is | 對象身份比較 |
is not | 忽略對象身份 |
除了不同類型的數字外,其它類型的對象永遠不會相等。此外,某些類型(例如函數對象)僅支持簡單的比較概念,即任何兩種類型的對象都不相等。這些比較操作會在其比較兩個不同類的對象時拋出TypeError錯誤。is和not操作符的行爲是不可定製的;它們也可以應用於任何兩個對象,並且不會引發異常。
in和not in這兩個僅用於序列對象的操作與這些比較操作擁有相同的優先級。
4.數字類型——int、float與complex
數字類型有三個下級分支:整數,浮點數和複數。需要指出的是,布爾數是一個整數的子類型。整數具有無限精度,也就是說在Python中不限制整數的位數。浮點數通常在C中使用double實現;複數有一個實部和虛部,每個部分都是一個浮點數。要從複數z中提取這些零件,請使用z.real和z.imag。(標準庫包含其他數字類型,保留有理數的分數以及用戶可定義的精度保存浮點數的小數。)
數字由數字文字或內置函數和運算符的結果創建。未經修飾的整數文字(包括十六進制,八進制和二進制數字)將產生整數。包含小數點或指數符號的數字文字會生成浮點數字。將'j'或'J'附加到數字字面上會得到一個虛數(一個具有零實數部分的複數),您可以將其添加到整數或浮點數以獲得具有實部和虛部的複數。
下表列出數字類型支持的操作:
操作 | 結果 |
x + y | x與y的和 |
x – y | x減y的差 |
x * y | x乘y的積 |
x / y | x除y的商 |
x // y | x除y的商向下求整 |
x % y | x除y的餘數 |
-x | 非x |
+x | x不變 |
abs(x) | x的絕對值 |
int(x) | 將x轉化爲整型數 |
float(x) | 將x轉化爲浮點數 |
complex(re,im) | re爲複數的實部,im爲複數的虛部 |
c.conjugate() | 數字c的共軛數 |
divmod(x, y) | 等價於(x//y, x%y) |
pow(x, y) | 等價於x^y |
x ** y | 等價於x^y |
所有的實數類數字(整型和浮點數)都支持下述操作:
操作 | 結果 |
math.trunc(x) | 把x截斷爲整型數 |
round(x[, n]) | x四捨五入爲n位數,四捨五入最後一位爲偶數。如果省略n,則默認爲0。 |
math.floor(x) | 小於等於x的最大整數 |
math.ceil(x) | 大於等於x的最小整數 |
math和cmath模塊內由豐富的數字操作函數。
4.1 整數類型的按位運算
位操作僅對整型數敏感。位操作中,負數等價於它的補碼值(假定有足夠的位數以便在操作期間不發生溢出)。位操作的優先值高於所有的比較操作,但低於所有的數學操作。但是,~的優先級與+與-這兩個數學操作的優先級相同。下表以升序優先級列出了所有位操作:
操作 | 結果 |
x | y | x與y按位或 |
x ^ y | x與y按位異或 |
x & y | x與y按位與 |
x << n | x左移n位 |
x >> n | x右移n位 |
^x | x按位非 |
4.2 整型數的額外方法
int.bit_length()
返回表示二進制整數所需的位數,不包括符號和前導零
int.to_bytes(length, byteorder, *,signed=False)
返回表示整數的字節數組。
classmethod int.from_bytes(bytes,byteorder, *, signed=False)
返回給定字節數組所表示的整數。
4.3 浮點數的額外方法
float. as_integer_ratio()
返回一對整數,其比例與原始浮點數完全相等,並帶有一個正的分母。
float. is_integer()
如果float實例是有限整數值,則返回True,否則返回False.
float. hex()
將浮點數的表示形式返回爲十六進制字符串。對於有限的浮點數,這種表示將始終包 含一個前導0x和一個尾隨p和指數。
classmethod float. fromhex(s)
返回由十六進制字符串s表示的float。
4.4 散列數字類型(哈希數)
對於可能具有不同類型的數字x和y,只要x == y,就需要hash(x)== hash(y)。 爲了便於跨多種數字類型(包括int,float,decimal.Decimal和fractions.Fraction)的實現和效率,Python的數字類型哈希基於爲任何有理數定義的單個數學函數,因此適用於所有 int和fractions.Fraction的實例,以及所有有限的float和decimal.Decimal實例。 從本質上講,這個函數是通過對一個固定素數P減模P給出的.P的值可作爲sys.hash_info的模特屬性提供給Python。