Python bytes 類型用來表示一個字節串。“字節串“不是編程術語,是我自己“捏造”的一個詞,用來和字符串相呼應。
bytes 是 Python 3.x 新增的類型,在 Python 2.x 中是不存在的。
字節串(bytes)和字符串(string)的對比:
- 字符串由若干個字符組成,以字符為單位進行操作;字節串由若干個字節組成,以字節為單位進行操作。
- 字節串和字符串除了操作的數據單元不同之外,它們支持的所有方法都基本相同。
- 字節串和字符串都是不可變序列,不能隨意增加和刪除數據。
bytes 只負責以字節序列的形式(二進制形式)來存儲數據,至於這些數據到底表示什么內容(字符串、數字、圖片、音頻等),完全由程序的解析方式決定。如果采用合適的字符編碼方式(字符集),字節串可以恢復成字符串;反之亦然,字符串也可以轉換成字節串。
說白了,bytes 只是簡單地記錄內存中的原始數據,至於如何使用這些數據,bytes 並不在意,你想怎么使用就怎么使用,bytes 並不約束你的行為。
bytes 類型的數據非常適合在互聯網上傳輸,可以用於網絡通信編程;bytes 也可以用來存儲圖片、音頻、視頻等二進制格式的文件。
字符串和 bytes 存在着千絲萬縷的聯系,我們可以通過字符串來創建 bytes 對象,或者說將字符串轉換成 bytes 對象。有以下三種方法可以達到這個目的:
- 如果字符串的內容都是 ASCII 字符,那么直接在字符串前面添加
b
前綴就可以轉換成 bytes。 - bytes 是一個類,調用它的構造方法,也就是 bytes(),可以將字符串按照指定的字符集轉換成 bytes;如果不指定字符集,那么默認采用 UTF-8。
- 字符串本身有一個 encode() 方法,該方法專門用來將字符串按照指定的字符集轉換成對應的字節串;如果不指定字符集,那么默認采用 UTF-8。
【實例】使用不同方式創建 bytes 對象:
#通過構造函數創建空 bytes b1 = bytes() #通過空字符串創建空 bytes b2 = b'' #通過b前綴將字符串轉換成 bytes b3 = b'https://jq.qq.com/?_wv=1027&k=wXPt4wFA' print("b3: ", b3) print(b3[3]) print(b3[7:22]) #為 bytes() 方法指定字符集 b4 = bytes('Python資料', encoding='UTF-8') print("b4: ", b4) #通過 encode() 方法將字符串轉換成 bytes b5 = "Python資料".encode('UTF-8') print("b5: ", b5)
對於非 ASCII 字符,print 輸出的是它的字符編碼值(十六進制形式),而不是字符本身。非 ASCII 字符一般占用兩個字節以上的內存,而 bytes 是按照單個字節來處理數據的,所以不能一次處理多個字節。
bytes 類也有一個 decode() 方法,通過該方法可以將 bytes 對象轉換為字符串。緊接上面的程序,添加以下代碼:
#通過 decode() 方法將 bytes 轉換成字符串 str1 = b5.decode('UTF-8') print("str1: ", str1)
結尾福利
這里免費送大家一套2020最新python入門到高級項目實戰視頻教程,點擊這里即可領取!或者加入博主Python交流圈(QQ群:1049600759)免費下載。
本文的文字及圖片來源於網絡加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。