week02_python內置數據結構__bytes、bytearray

bytes、bytearray

Python3引入兩個新類型:

    bytes

    不可變字節序列

    bytearray

    字節數組

    可變


字符串與bytes

    字符串是字符組成的有序序列,字符可以使用編碼來理解;

    bytes是字節組成的有序的不可變序列;

    bytearray是字節組成的有序的可變序列;

編碼與解碼

    字符串按照不同的字符集編碼encode返回字節序列bytes

        S.encode(encoding='utf-8', errors='strict') -> bytes

    字節序列按照不同的字符集解碼decode返回字符串

        bytes.decode(encoding='utf-8', errors='strict') -> str

        bytearray.decode(encoding='utf-8', errors='strict') -> str


bytes定義:

bytes()    空bytes
bytes(int)    指定字節的bytes,被0填充
bytes(iterable_of_ints) -> bytes    [0,255]的int組成的可迭代對象
bytes(string,encoding[,errors]) -> bytes     等價於string.encode()
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
從一個字節序列或者buffer複製出一個新的不可變的bytes對象

使用b前綴定義
    只允許基本ASCII使用字符形式b'abc9'
    使用16進製表示b'\x41\x61'

bytes操作:

和str類型類似,都是不可變類型,所以方法很多都一樣。只不過bytes方法,輸入是bytes,輸出是bytes
    In [1]: b'abcdef'.replace(b'f',b'k')
    Out[1]: b'abcdek'
    
    In [2]: b'abc'.find(b'b')
    Out[2]: 1
    
    
類方法bytes.fromhex(string):
    string必須是2個字符的16進制的形式,‘6162 6a 6b’,空格將被忽略
        In [3]: bytes.fromhex('6162 09 6a 6b00')
        Out[3]: b'ab\tjk\x00'
        
   
hex()
    返回16進製表示的字符串
    In [4]: 'abc'.encode().hex()
    Out[4]: '616263'
    
索引
    In [6]: b'abcdef'[2]
    Out[6]: 99
    返回該字節對應的數,int類型


bytearray定義

bytearray()    空bytearray
bytearray(int)    指定字節的bytearray,被0填充
bytearray(iterable_of_ints) -> bytearray    [0,255]的int組成的可迭代對象
bytearray(string,encoding[,errors]) -->bytearray    近似string.encode(),不過返回可變對象
bytearray(bytes_or_buffer)    從一個字節序列或者buffer複製出一個新的可變的bytearray對象

注意 ,b前綴定義的類型是bytes類型

bytearray操作

和bytes類型的方法相同
    In [1]: bytearray(b'abcdef').replace(b'f',b'k')
    Out[1]: bytearray(b'abcdek')
    
    In [2]: bytearray(b'abc').find(b'b')
    Out[2]: 1
    
類方法bytearray.fromhex(string)
    string必須是2個字符的16進制的形式,'6162 6a 6b',空格將被忽略
    In [3]: bytearray.fromhex('6162 09 6a 6b00')
    Out[3]: bytearray(b'ab\tjk\x00')
    
hex()
    返回16進製表示的字符串
    In [5]: bytearray('abc'.encode()).hex()
    Out[5]: '616263'
    
索引
    In [6]: bytearray(b'abcdef')[2]
    Out[6]: 99
    返回該字節對應的數,int類型

操作:

append(int)尾部追加一個元素
insert(index,int)在指定索引位置插入元素
extend(iterable_of_ints)將一個可迭代的整數集合追加到當前bytearray
pop(index=-1)從指定索引上移除元素,默認從尾部移除
remove(value)找到第一個value移除,找不到拋ValueError異常

注意,上述方法若需要使用int類型,值在[0,255]

clear()清空bytearray
reverse()翻轉bytearray,就地修改

舉例:

In [1]: b = bytearray()

In [2]: b.append(97)

In [3]: b.append(99)

In [4]: b
Out[4]: bytearray(b'ac')

In [5]: b.insert(1,98)

In [6]: b
Out[6]: bytearray(b'abc')

In [7]: b.extend([65,66,67])

In [8]: b
Out[8]: bytearray(b'abcABC')

In [9]: b.remove(66)

In [10]: b
Out[10]: bytearray(b'abcAC')

In [11]: b.pop()
Out[11]: 67

In [12]: b.reverse()

In [13]: b
Out[13]: bytearray(b'Acba')

In [14]: b.clear()

In [15]: b
Out[15]: bytearray(b'')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章