python3 byte 字面值_bytearray() Python 内置函数
轉載須注明出處:簡書@Orca_J35 | GitHub@orca-j35
class bytearray([source[, encoding[, errors]]])
該內置函數本質上是 bytearray 類的構造函數,用于創建一個 bytearray 實例。bytearray 實例是一個由字節(8-bits 無符號)構成的可變序列,并擁有大多數可變序列的常見方法[詳見:Mutable Sequence Types],并且還包含 bytes 類型中的大多數方法[詳見: Bytes and Bytearray Operations ]
在 Python 中,我們可以通過 bytes 字面值來創建 bytes 對象,但并沒有用于創建 bytearray 字面值的語法,我們只能通過調用構造函數 bytearray() 來創建 bytearray 對象。
初始化 bytearray 實例的方式如下:
沒有任何參數時,將創建一個空實例
# bytearray() -> empty bytes array
>>> bytearray()
bytearray(b'')
source 是一個整數時,將創建一個長度為 source 且每個字節均為空的 bytearray 對象
# bytearray(int) -> bytearray
>>> bytearray(5)
bytearray(b'\x00\x00\x00\x00\x00')
source 是一個由自然數構成的可迭代對象,且每個元素的值 x 均滿足 0 ≤ x ≤ 255
# bytearray(iterable_of_ints) -> bytearray
>>> bytearray(range(5)) # 最大范圍是range(256)
bytearray(b'\x00\x01\x02\x03\x04')
>>> bytearray([1,2,3,4,5])
bytearray(b'\x01\x02\x03\x04\x05')
source 是一個 bytes 對象,將通過緩沖器協議(buffer protocol)復制其中的二進制數據
# bytearray(bytes) -> mutable copy of bytes
>>> bytearray(b'Hi!')
bytearray(b'Hi!')
source 是一個實現了緩沖區(buffer) API 的對象時,則會使用 source 的只讀緩沖區來初始化 bytearray 對象。
# bytearray(buffer) -> mutable copy of buffer
source 是一個字符串時,必須給定 encoding 參數。此時,構造函數 bytearray() 會通過 str.encode() 方法將 source 編碼(encoding)為字節序列。
encoding 參數用于設置編碼方案,會被傳遞給 str.encode()。在 Standard Encodings 中可查看編碼方案列表。
errors 參數用于設置錯誤處理方案,也會被傳遞給 str.encode()。如果 errors 為空,str.encode() 會使用默認方案 'strict'——該方案在出現編碼錯誤時會拋出 UnicodeError。errors 可以是 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 或任何已通過 codecs.register_error() 注冊的名稱。
Tips: 在 Python 文檔中,"編碼(encoding)"是指將 Unicode 字符串轉換為字節序列的規則,也就是說"編碼"包含了從"抽象字符序列"到"字節序列"的全部過程。
# bytearray(string, encoding[, errors]) -> bytearray
>>> bytearray('abcd','utf-8')
bytearray(b'abcd')
>>> bytearray('鯨','utf-8')
bytearray(b'\xe9\xb2\xb8')
>>> bytearray('鯨','ascii')
Traceback (most recent call last):
File "", line 1, in
bytearray('鯨','ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\u9cb8' in position 0: ordinal not in range(128)
>>> bytearray('鯨','ascii','ignore')
bytearray(b'')
1. 深入理解 bytearray 對象
在 C 語言中創建字節數組的語法如下:
byte bytes_array[] = {0x02, 0x03, 0x0A, 0x41}
Python 中的 bytearray 對象與 C 語言中的字節數組類似,每個索引位置都對應一個整數 x (且 0≤x≤255)。不同之處在于 bytearray 對象會以轉義序列或 ASCII 字符顯示相應數值(如,將十進制整數 65 顯示為字母 A),但是 bytearray 對象的每個索引位置仍然是一個數值,而非一個字符。bytearray 對象是一個實實在在的字節序列,每個索引位置對應一個字節(byte)而不是一個字符(char)。
注意:不能將 bytearray 完全等同于 C 的字符數組,因為 bytearray 遠比字符數組強大。
下面創建一個與上面的 C 語言字節數組擁有相同內容的 bytearray 對象:
>>> a_obj = bytearray((0x02, 0x03, 0x0A, 0x41))
>>> a_obj
bytearray(b'\x02\x03\nA') # 以轉義序列或 ASCII 編碼顯示相應數值
>>> [ x for x in a_obj]
[2, 3, 10, 65] # 每個索引位置始終對應一個數值,而非一個字符
1.1 如何顯示數值
如果某個索引位置的數值對應 ASCII 編碼中的可見字符,那么該索引位便會顯示該字符:
>>> bytearray((0x41, 0x42))
bytearray(b'AB')
如果某個索引位置的數值對應 ASCII 編碼中的不可見字符,但該字符擁有"獨立轉義序列",那么該索引位置會顯示該"獨立轉義序列":
>>> bytearray((0x0A, 0x0D))
bytearray(b'\n\r')
如果某個索引位置的數值對應 ASCII 編碼中的不可見字符,并且該字符沒有"獨立轉義序列";或該數值已超出了 ASCII 編碼的范圍。那么該索引位置會顯示十六進制('\xhh')轉義序列。在 bytearray 對象中,十六進制('\xhh')轉義序列用于表示具有指定數值的字節。
>>> bytearray((0x01, 0xFE))
bytearray(b'\x01\xfe')
將 bytearray 對象中各個字節的數值,盡力按照 ASCII 編碼顯示為相應字符的好處是:如果 bytearray 對象是一個 ASCII 編碼的字節序列,那么便可直接讀懂其中的內容,無需解碼:
>>> hi = bytearray('hello!\n','ascii')
>>> hi
bytearray(b'hello!\n') # 雖然是字節序列,但是不用解碼也讀懂
>>> hi.decode('ascii')
'hello!\n'
再次提醒:bytes 對象是一個實實在在的字節序列,每個索引位置對應一個數值而不是一個字符。在讀取 bytes 對象的任意索引位置時,只會得到某個數值,不會得到 ASCII 字符。
總結
以上是生活随笔為你收集整理的python3 byte 字面值_bytearray() Python 内置函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查网址备案信息(查网址备案)
- 下一篇: html a标签去掉下划线_如何用HTM