Python 標準資料型別 Bytes

2021-08-15 18:10:04 字數 1720 閱讀 6324

bytes 物件是由單個位元組作為基本元素(8位,取值範圍 0-255)組成的序列,為不可變物件。

bytes 物件只負責以二進位制位元組序列的形式記錄所需記錄的物件,至於該物件到底表示什麼(比如到底是什麼字元)則由相應的編碼格式解碼所決定。我們可以通過呼叫 bytes() 類(沒錯,它是類,不是函式)生成 bytes 例項,其值形式為 b』***xx』,其中 『***xx』 為一至多個轉義的十六進製制字串(單個 x 的形式為:\xhh,其中 \x 為小寫的十六進製制轉義字元,hh 為二位十六進製制數)組成的序列,每個十六進製制數代表乙個位元組(八位二進位制數,取值範圍 0-255),對於同乙個字串如果採用不同的編碼方式生成 bytes 物件,就會形成不同的值:

比如上例中的 a 字串物件,其十進位制 unicode 值為 24464,分別使用 『utf-8』 和 『gb2312』 兩種編碼格式將其轉換成 bytes 物件 b 和 c ,結果 b 和 c 的值是完全不同的,由於基於的編碼格式不一致, b c 長度甚至都不相同,前者有 3 個位元組長度,後者有 2 個位元組長度:

另外,對於 ascii 字串,可以直接使用 b』***x』 賦值建立 bytes 例項,但對於非 ascii 編碼的字元則不能通過這種方式建立 bytes 例項:

由於 bytes 是序列,因此我們可以通過索引或切片訪問它的元素:

可以發現如果以單個索引的形式訪問元素,其會直接返回單個位元組的十進位制整數,而以序列片段的形式訪問時,則返回相應的十六進製制字串行。

對於 bytes 例項,如果需要還原成相應的字串,則需要借助內建的解碼函式 decode(),借助相應的編碼格式解碼為正常字串物件,如果採用錯誤的編碼格式解碼,則有可能發生錯誤:

對於urllib開啟網頁返回的資料也是bytes資料,但是在輸出後就有點感覺很好奇,python到底是怎麼處理的。

import urllib.request as req

response = req.urlopen("")

page = response.read() #返回的bytes型資料

print(page)

#輸出內容

'''b'\n

\n\r

\n\r

\n\r

\n\r

\n\r

\n\r

\n\r

\n\r

\n\r

\n\r.......'

'''

為什麼bytes型資料輸出來不是 0-255 的數字,反而英文byte輸出是英文,中文byte輸出是十六進製制???

但是結果就是這樣,這就是我們看到的,很容易能夠知道,python就是做了這樣的處理。

每天抽菸的幾分鐘冥想,最能讓我知道,誰在默默地雪中送炭,誰在背後下套捅刀子!!!,在我心裡,不痛快的事情它會過去,但是不代表我會忘記!!!

最後,男人就得有男人的樣子,你要知道,這個社會還是男人的。

python 標準資料型別

資料型別 set number string list tuple dict bool 標準資料型別 none number string bool 1.none 主要為了判斷存在與否 2.number int long float complex id 查詢記憶體位址 type 查詢資料型別 3....

Python 標準資料型別

python中存在 數字 字串 列表 元組 字典 集合 集合不常用 資料型別。數字資料型別,包括整數 浮點數 複數和布林型別。整數 int 長整型 包括正數,負數,0。浮點數 float 浮點型 帶有小數點的實數。複數 complex 複數由 實部和虛部組成,例 3 4j 或 3 4j 虛部的 j ...

Python標準資料型別 數字型別

python3中標準資料型別有 數字 number 字串 string 列表 list 元組 tuple 集合 set 字典 dictionary 其中不可變資料有3個 數字 number 字串 string 元組 tuple 可變資料有2個 列表 list 集合 set 字典 dictionary...