一、bytes、bytearry
- python3版本引入兩個新類型
- bytes: 不可變字節序列
- bytearry:字節數組,可變
二、字符串與bytes
- 字符串是字符組成的有序序列,字符可以使用編碼(ASCII)來理解
- bytes是字節組成的有序不可變序列
- bytearry是字節組成的有序可變序列
三、編碼與解碼
- 編碼:字符串按照不同的字符集編碼encode返回字節序列bytes
- encode(encoding='utf-8',error='strict')
- 解碼:字節序列按照不同的字符集解碼decode返回字符串
- 舉例:
- 編碼字符串‘abc’
>>> bytes('abc','UTF8')
b'abc'
編碼字符串‘abc’
>>> a = 'abc'.encode()
>>> a
b'abc'
>>> type(a)
<class 'bytes'>
解碼字符串'abc'
>>> a.decode()
'abc'
>>> a
b'abc'
影子拷貝
>>> b = bytes(a)
>>> b
b'abc'
實際比較a和b的值
>>> id(a) == id(b)
True
實際比較內存id
>>> id(a) is id(b)
False
>>>
- 編碼字符串‘abc’
四、bytes定義
- bytes() 空bytes
- bytes(string,encoding) 返回bytes類型,等價於string.encode()
- bytes(bytes_or_buffer) 從一個字節序列或者buffer復制出一個新的不可變的bytes對象
- 使用b前綴定義,只允許基本ASCII使用字符形式,如b'abc'
五、bytes操作
- 和字符串str類型操作類似,都是不可變類型,所以方法很多都是一樣,只不過bytes的方法,輸入時bytes,輸出是bytes
- a.encode().hex() 返回16進制的字符串
- 索引訪問:a[2] 返回該字節對應的ACSII對應的數,int類型
- bytearray和bytes操作一樣
- 舉例:
- >>> a = b'abcdef'
>>> a.replace(b'f', b'k')
b'abcdek'
>>> a.find(b'b')
1
>>>
切割
>>> a = b'abcdef'
>>> a.split(b'b')
[b'a', b'cdef']
>>> 'abc'.encode().hex() 十六進制
'616263'
索引訪問
>>> a[2] 對應的編碼數字
99