Python 3.7.1 內置類型


完整的官方英文文檔在這裏:點我。現將其中重點的部分摘出來。
不斷更新中…


1.真值測試

默認情況下,對象被視爲true,除非其類定義了__bool__()方法並且返回False或者__len__()方法返回零(使用對象調用)。 以下是大多數被認爲是False的內置對象:

  • 常量定義爲False:None和False。
  • 任何數值類型的零:00.00jDecimal(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

字符串很重要,分成了三章進行介紹:

  1. 字符串的定義、所有方法,格式化字符串,請訪問 Python 3.7.1 基礎-數據類型-字符串
  2. 序列的通用操作包含了一部分字符串操作,請訪問 Python 3.7.1 基礎 數據類型 列表 元組 字符串
  3. string模塊也隸屬於字符串,裏面也有些內容需要了解,請訪問 Python 3.7.1 模塊 string

7. 集合類型 set,frozenset

已經單獨成章,請訪問 Python 3.7.1 基礎 數據類型 集合 set

8. 映射類型 字典 dict

已經單獨成章,請訪問 Python 3.7.1 數據類型 字典 dict

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章