1. 程式人生 > >python3 bytes數據類型探討

python3 bytes數據類型探討

而是 占用 直接 二進制 之間 一段 gbk 編碼 編碼格式

python3中str和bytes分開了,那麽bytes與str之間到底是什麽關系呢?下面從表現形式、處理方式、存儲形式三個方面來闡述其區別

1. 在字符串前面加上b,就表示bytes數據類型

1 s1 = "hello"
2 b1 = b"hello"   # 前面加上b讓它變成bytes類型
3 print(s1)
4 print(b1)

輸出

s1 = "hello"
b1 = b"hello"   # 前面加上b讓它變成bytes類型
print(s1)
print(b1)

2. 字符串是以字符為單位進行處理的,bytes類型是以字節為單位處理的。

python3中bytes類型主要用於網絡傳輸和硬盤存儲,是以字節

為單位處理的

3. 字符串的編碼方法只能是Unicode,bytes可以是gbk,utf-8或其他非Unicode形式。bytes類型只負責以二進制字節序列的形式記錄信息,至於該二進制序列表示什麽信息(比如到底是什麽字符)由編碼形式決定

python3中對str和bytes做了嚴格區分,文本總是用str類型表示,編碼方式是Unicode,二進制數據則用bytes類型表示。下麥呢來看一段代碼

1 s = "hello中國"
2 b = s.encode("utf-8")
3 print(b)
4 for i in b:      # bytes類型也是可叠代對象,是不是很神奇
5     print
(i) 6 for i in b: 7 print(bin(i))

輸出

bhello\xe4\xb8\xad\xe5\x9b\xbd
104
101
108
108
111
228
184
173
229
155
189
0b1101000
0b1100101
0b1101100
0b1101100
0b1101111
0b11100100
0b10111000
0b10101101
0b11100101
0b10011011
0b10111101

Process finished with exit code 0

bytes實際上是一串0和1的組合,但為了在ide環境中讓我們相對直觀的觀察,它被表現成了b‘\xe4\xb8\xad\xe6\x96\x87‘這種形式,開頭的b

表示這是一個bytes類型。\xe4是十六進制的表示方式,它占用1個字節的長度。bytes是一種比特流,它的存在形式是01010001110這種。我們無論是在寫代碼,還是閱讀文章的過程中,肯定不會有人直接閱讀這種比特流,它必須有一個編碼方式,使得它變成有意義的比特流,而不是一堆晦澀難懂的01組合。

字符串有一個encode()方法,與bytes的decode方法相對應,利用這兩個方法可以實現字符串與bytes類型的轉化

1 s1 = "hello"
2 b1 = s1.encode("utf-8")
3 print(b1)
4 s2 = b1.decode("utf-8")
5 print(s2)

輸出

bhello
hello

Process finished with exit code 0

還有一種方法,就是利用調用bytes()類和str()類來完成轉化

1 b1 = bytes(s1, encoding="utf-8")
2 print(b1)
3 s2 = str(b1, encoding="utf-8")
4 print(s2)

輸出‘

bhello
hello

Process finished with exit code 0

實際上,我們知道,所有數據包括字符串,存儲到硬盤上都是以0101的形式,也都需要編碼解碼。關於bytes和str,只需記住這幾句話:

(1)在將字符串存入磁盤和從磁盤讀取字符串的過程中,Python自動地幫你完成了編碼和解碼的工作,你不需要關心它的過程;

(2)使用bytes類型,實質上是告訴Python,不需要它幫你自動地完成編碼和解碼的工作,而是用戶自己手動進行,並指定編碼格式;

(3)bytes類型主要用於網絡傳輸和硬盤存儲

python3 bytes數據類型探討