一. 字节串 bytes
字节串 bytes 也叫字节序列,存储以字节为单位的数据,bytes 具有以下特点:
- 字节串是不可变的字节序列;
- 字节是 0~255 的整数;
- 数据传输和存储都是以字节为单位存储的:
1byte = 8bit
,即 1 个字节等于 8 位;
示例
字符串编码后得到的字节串,均是 0x00~0xFF
之间的整数:
>> '中国'.encode('utf-8')
b'\xe4\xb8\xad\xe5\x9b\xbd'
下面,我们来看 bytes 的基本操作。
创建空字节串字面量
>> b1, b2, b3, b4 = b'', b"", b'''''', b""""""
>> b1, b2, b3, b4
(b'', b'', b'', b'')
创建非空字节串的字面值
>> b1 = b'Python'
>> b1
b'Python'
也可以使用十六进制的形式创建字面值:
>> hex(ord('P')), hex(ord('y'))
('0x50', '0x79')
>> b3 = b'\x50\x79'
>> b3
b'Py'
但不允许直接使用非 ASCII 字符创建:
>> b2 = b'中国'
File "<ipython-input-4-30ea9a50e9c6>", line 1
b2 = b'中国'
^
SyntaxError: bytes can only contain ASCII literal characters.
>> b2 = b'\xe4\xb8\xad\xe5\x9b\xbd'
>> b2
b'\xe4\xb8\xad\xe5\x9b\xbd'
>> b2.decode('utf-8')
'中国'
字节串的构造函数
函数 | 说明 |
---|---|
bytes() | 生成一个空的字节串,等同于 b'' |
bytes(整型可迭代对象) | 用可迭代对象初始化一个字节串 |
bytes(整数n) | 生成 n 个值为 0 的字节串 |
bytes(字符串,encoding='utf-8') | 用字符串的转换编码生成一个字节串 |
具体用法如下:
>> bytes()
b''
>> bytes(range(97,100))
b'abc'
>> bytes(3)
b'\x00\x00\x00'
>> bytes('中国', encoding='utf-8')
b'\xe4\xb8\xad\xe5\x9b\xbd'
字节串的运算
运算 | 详情 |
---|---|
算数运算 |
+ 、+= 、* 、*=
|
比较运算 |
< 、<= 、> 、>= 、== 、!=
|
成员运算 |
in 、not in
|
序列操作 | 索引 、切片 |
函数 |
len() 、max() 、min() 、sum() 、any() 、all()
|
bytes 和 str 的区别
-
bytes
存储字节(0-255); -
str
存储 Unicode 字符(0 - 65535或更大);
bytes 与 str转换
编码(encode)
str ---------------------------------> bytes
b = s.encode(encoding = 'utf-8')
解码(decode)
bytes ---------------------------------> str
s = b.decode(encoding = 'utf-8')
二. 字节数组 bytearray
字节数组是 可变的字节序列 。
创建函数 bytearray
函数 | 说明 |
---|---|
bytearray() | 生成一个空的字节数组 |
bytearray(整型可迭代对象) | 用可迭代对象生成一个字节数组 |
bytearray(整数n) | 生成包含 n 个值为 0 的字节数组 |
bytearray(字节串,encoding='utf-8') | 用字符串的转换编码生成一个字节数组 |
具体用法如下:
>> bytearray()
bytearray(b'')
>> ba = bytearray(range(65, 68))
>> ba
bytearray(b'ABC')
>> ba[1] = 98
>> ba
bytearray(b'AbC')
>> bytearray(3)
bytearray(b'\x00\x00\x00')
>> bytearray('中国', encoding='utf-8')
bytearray(b'\xe4\xb8\xad\xe5\x9b\xbd')
值得注意的是字节数组是可变的字节序列,因此,字节数组支持索引和切片赋值。