Python3的新類型:Bytes

Bytes的定義方法

byte是不可變類型,一旦定義不可以修改

>>> b1 = bytes() #  b" 空字節,一旦定義不可修改
>>> b1
b''
>>> b1 = 1
>>> b1
1
>>> b2 = b''
>>> b2
b''
>>> b3 = type(5)
>>> b3
int
>>> b3 = b'\x00\x00\x00\x00\x00'
>>> b3
b'\x00\x00\x00\x00\x00'
>>> b4 = bytes('abc', 'utf-8')
>>> b4
b'abc'
>>> b4 = b'abcd'
>>> b4
b'abcd'
>>> b4 = 'abc'.encode('gbk') # 默認是utf-8
>>> b4
b'abc'
>>> b5 = " "
>>> b5
' '

bytes的變量iterable_of_ints

注意是**單字節的整數的可迭代對象**,即0-255直接的數字,不能超出

>>> b6 = bytes(range(10)) # bytes(iterable_of_ints)
>>> b6 # 打印ascii表的前10個字符
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t'
>>> b6 = bytes(range(0x30, 0x3a))
>>> b6
b'0123456789'
>>> bytes(range(65, 91))
b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> bytes(range(65+0x20, 91+32))
b'abcdefghijklmnopqrstuvwxyz'

Bytes的訪問方法

是不可變類型,與字符串相似

>>> b8 = bytes(range(65,91,2))
b8
b'ACEGIKMOQSUWY'
>>> b8[0]
65
for i in b8:
    print(i, end="~") # 打印出來的是int類型,不是字符類型
65~67~69~71~73~75~77~79~81~83~85~87~89~

這裏與字符串不同:字符串遍歷出來的是字符類型,但bytes遍歷出來的是int類型

>>> for i in b8:
>>>     print(type(i), end="~")
<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~<class 'int'>~

所以內存中,你可以把它看做大字符串,也可以看做多個整形,因爲對於內存來說,計算機都是無差別的0和1

bytes的封裝

即在外面再包一層

>>> b'\x41'
>>> bytes(b'\x41')
b'A'

b'A'

bytes 的方法

字符串的方法,bytes基本可以用。大道至簡,Python如是。

# 拼接
>>> b'a' + b'bcde'
b'abcde'
# index
>>> b"a" in b'abc'
True
>>> b'abc'.index(b'a')
0
>>> b'abc'.find(b'bcd')
-1
>>> b'aabbccdd'.replace(b'bc',b'--')
b'aab--cdd'
>>> b'boygirlmanboywonmen'.split(b'boy') 
#切割出的結果也是bytes
[b'', b'girlman', b'wonmen']
>>> b'abc'.partition(b'b') # 
(b'a', b'b', b'c')
>>> b'abc'.startswith(b'a')
True

用類方法構建bytes

>>> bytes(range(5))
b'\x00\x01\x02\x03\x04'
>>> x= bytes.fromhex('09 0d 0a 41 42')
>>> x
# 用十六進制構建一個byte類型,注意用字符串的16進製表達。
# 寫法注意兩位一斷,前面無需加0x
b'\t\r\nAB'
# ps
>>> hex(9)
'0x9'

十六進制的表達還原

x.hex() #調用bytes的hex函數
'090d0a4142'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章