內置類型
完整的官方英文文檔在這裏:點我。現將其中重點的部分摘出來。
不斷更新中…
1.真值測試
默認情況下,對象被視爲true,除非其類定義了__bool__()
方法並且返回False或者__len__()
方法返回零(使用對象調用)。 以下是大多數被認爲是False的內置對象:
- 常量定義爲False:None和False。
- 任何數值類型的零:
0
,0.0
,0j
,Decimal(0)
,Fraction(0, 1)
- 空序列和集合:
''
,()
,[]
,{}
,set()
,range(0)
除非另有說明,否則具有布爾結果的操作和內置函數始終對false返回0 或False;對true返回 1或True。(重要的例外:布爾運算or並and始終返回其中一個。)
def fun01_tf():
flag = True
from decimal import Decimal
from fractions import Fraction
zl = [0,0.0,0j,Decimal(0),Fraction(0,1),'',(),[],set(),range(0)]
for x in zl:
if x:
flag = False
break
print(flag)
if __name__ == "__main__":
fun01_tf()
# 輸出結果
True
2.布爾運算
- and 短路運算 ( 按順序,一假則假,跳過後續)
- or 短路運算 ( 按順序,一真則真,跳過後續)
- not 優先級低
3.比較運算符
>, >=, <, <=, !=, ==, is, is not
8個
- 不同類型(除了不同的數值類型),永遠不會相等。
- 此外,某些類型 (例如,函數對象) 的任何兩個對象都是不相等的。
- 同一個類中的不同對象,通常會被判定爲不相等,除非該類定義了
__eq__()
方法
class A:
def __init__(self,val):
self.val = val
def __eq__(self, other):
return self.val == other.val
def fun01_eq():
a = A(7)
b = A(5)
c = A(7)
print(a == b,a == c)
if __name__ == "__main__":
fun01_eq()
# 輸出結果
False True
(1)既然==
運算符可以通過__eq__()
來實現,剩下的也可以自定義比較函數。
比較運算符 | 對應的內置函數名 |
---|---|
== | __eq__() |
!= | __eq__() |
>= | __ge__() |
> | __gt__() |
<= | __le__() |
< | __lt__() |
(2)is和is not運算符不能自定義;它們也可以應用於任何兩個對象,並且不會引發異常。
(3)in 和 not in 有相同的語法優先級操作, 只支持序列類型。
4.數值類型
int, float, complex
(1)Python有以下三種的數值類型: 整型(integers), 浮點型(floating point numbers), 以及 複數(complex numbers).另外,布爾是一個整數的子類型。
(2) 標準庫包括了額外的數值類型,如分數(fractions) (包含了有理數)和 小數(decimal) (包含了自定義精度的浮點型)。
4.1 操作運算符
+ - * / % -(一元) +(一元) // **
abs() int() float() divmod() pow() complex()
注意:int,float,complex接收所有Nd類型的數字,有關Nd類型,參見 文檔
4.2 整數的一些方法
int.bit_length()
功能:返回表示二進制整數所需的位數,不包括符號和前導零。
版本:Python 3.1中的新方法。
def fun01_opt():
n = -37
print(bin(n),int.bit_length(n))
# 輸出結果
-0b100101 6
int.to_bytes(length, byteorder, *, signed=False)
功能:返回一個表示整數的字節數組。
版本:Python 3.2中的新功能。
>>> (1024).to_bytes(2, byteorder='big')
b'\x04\x00'
>>> (1024).to_bytes(10, byteorder='big')
b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
>>> (-1024).to_bytes(10, byteorder='big', signed=True)
b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
>>> x = 1000
>>> x.to_bytes((x.bit_length() // 8) + 1, byteorder='little')
b'\xe8\x03'
(1)使用length表示字節長度。如果長度不夠,則會引發OverflowError。
print((4096).to_bytes(1,byteorder='big'))
#輸出結果
Traceback (most recent call last):
File "xx/lea-dt-normal.py", line 53, in fun01_opt
print((4096).to_bytes(1,byteorder='big'))
OverflowError: int too big to convert
(2)byteorder參數確定用於表示整數的字節順序。如果byteorder爲“big”,則最高有效字節位於字節數組的開頭。如果byteorder爲“little”,則最高有效字節位於字節數組的末尾。要請求主機系統的本機字節順序,請使用sys.byteorder
作爲字節順序值。
(3)signed參數確定二進制補碼是否用於表示整數。如果signed是False且給出了負整數,則會引發OverflowError。signed的默認值爲False。
classmethod int.from_bytes(bytes, byteorder, *, signed=False)
功能:返回由給定的字節數組表示的整數。
>>> int.from_bytes(b'\x00\x10', byteorder='big')
16
>>> int.from_bytes(b'\x00\x10', byteorder='little')
4096
>>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)
-1024
>>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=False)
64512
>>> int.from_bytes([255, 0, 0], byteorder='big')
16711680
4.3 float上的一些方法
float類型實現了numbers.Real(虛基類)
功能:返回一對整數,其比率與原始浮點數完全相等,並帶有正分母。在無限大數字上報錯OverflowError
,在NaN數字上報ValueErrors錯誤。
def dt_float():
print(float.as_integer_ratio(6.9999999999999999))
print(float.as_integer_ratio(7.0000000000000000))
print(float.as_integer_ratio(0.53))
# 輸出結果
(7, 1)
(7, 1)
(2386907802506363, 4503599627370496)
5. 序列類型 list,tuples,range
序列類型有很多共同特性,還有自己特殊之處,已經單獨成章,請訪問
Python 3.7.1 基礎 數據類型 列表 元組 字符串
6. 文本序列類型 str
字符串很重要,分成了三章進行介紹:
- 字符串的定義、所有方法,格式化字符串,請訪問 Python 3.7.1 基礎-數據類型-字符串
- 序列的通用操作包含了一部分字符串操作,請訪問 Python 3.7.1 基礎 數據類型 列表 元組 字符串
- string模塊也隸屬於字符串,裏面也有些內容需要了解,請訪問 Python 3.7.1 模塊 string
7. 集合類型 set,frozenset
已經單獨成章,請訪問 Python 3.7.1 基礎 數據類型 集合 set
8. 映射類型 字典 dict
已經單獨成章,請訪問 Python 3.7.1 數據類型 字典 dict