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