我想了解python3的bytesbytearray课程.我看过关于它们的文档,但没有全面描述它们的差异以及它们如何与string个对象交互.

推荐答案

bytes and bytearrays are similar...

python3的bytesbytearray类都包含字节数组,每个字节的值都在0到255之间.主要区别在于bytes对象是immutable,这意味着一旦创建,就不能修改其元素.相比之下,bytearray对象允许您修改其元素.

bytesbytearay都提供对字符串进行编码和解码的功能.

bytes and encoding strings

字节对象可以用几种不同的方式构造:

>>> bytes(5)
b'\x00\x00\x00\x00\x00'

>>> bytes([97, 98, 99])
b'abc'

>>> b'abc'
b'abc'

>>> bytes('abc')
TypeError: string argument without an encoding

>>> bytes('abc', 'utf-8')
b'abc'

>>> 'abc'.encode('utf-8')
b'abc'

>>> 'abc'.encode('utf-16')
b'\xff\xfea\x00b\x00c\x00'

>>> 'abc'.encode('utf-16-le')
b'a\x00b\x00c\x00'

请注意最后两个选项之间的区别:"utf-16"指定了通用的utf-16

因为字节对象是不可变的,试图更改其中一个元素

>>> a = bytes('abc', 'utf-8')
>>> a
b'abc'
>>> a[1] = 102
TypeError: 'bytes' object does not support item assignment

字节数组和编码字符串

bytes类似,字节数组可以通过多种方式构造:

>>> bytearray(5)
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00')

>>>bytearray([1, 2, 3])
bytearray(b'\x01\x02\x03')

>>> bytearray('abc')
TypeError: string argument without an encoding

>>> bytearray('abc', 'utf-8')
bytearray(b'abc')

>>> bytearray('abc', 'utf-16')
bytearray(b'\xff\xfea\x00b\x00c\x00')

>>> bytearray('abc', 'utf-16-le')
bytearray(b'a\x00b\x00c\x00')

因为字节数组是mutable,所以可以修改其元素:

>>> a = bytearray('abc', 'utf-8')
>>> a
bytearray(b'abc')
>>> a[1]=114
>>> a
bytearray(b'arc')

追加字节和字节数组

bytesbytearray个对象可与+运算符连接:

>>> a = bytes(3)
>>> a
b'\x00\x00\x00'

>>> b = bytearray(4)
>>> b
bytearray(b'\x00\x00\x00\x00')

>>> a+b
b'\x00\x00\x00\x00\x00\x00\x00'

>>> b+a
bytearray(b'\x00\x00\x00\x00\x00\x00\x00')

请注意,链接结果采用第一个参数的类型,因此a+b生成bytes对象,b+a生成bytearray.

将字节和字节数组对象转换为字符串

字节和字节数组对象可以使用decode函数转换为字符串.该函数假定您提供的解码类型与编码类型相同.例如:

>>> a = bytes('abc', 'utf-8')
>>> a
b'abc'
>>> a.decode('utf-8')
'abc'

>>> b = bytearray('abc', 'utf-16-le')
>>> b
bytearray(b'a\x00b\x00c\x00')
>>> b.decode('utf-16-le')
'abc'

Python-3.x相关问答推荐

错误2没有这样的文件或目录website_content.txt""

如何从选定的html内容中获取所需的文本

为什么我的Selenium脚本在密码元素上失败?

我可以设置树视图层次 struct 按钮吗?

不同的焦点顺序和堆叠顺序 tkinter

在Pandas中,根据另一列中的重复值将数据分组为一列

公开数据中的卫星图像网页抓取优化

Sunburst 折线图可视化

使用 Python 截断并重新编号对应于特定 ID/组的列

使用gekko python的混合整数非线性规划

协议不支持地址系列在将 Scapy L3socket 与 WSL 一起使用时

没有可重定向到的 URL.提供一个 url 或在模型上定义一个 get_absolute_url 方法

pip install mysqlclient 失败为 mysqlclient 运行 setup.py bdist_wheel ... 错误

逗号分隔列表的 argparse 操作或类型

为什么 virtualenv 会有效地禁用 Python 3 制表符补全?

Pylint 给我最后的新行丢失

无法在 Windows 8 中使用 Python 3.3 找到 vcvarsall.bat

为什么排序列表比未排序列表大

如何对字典的函数输出列表进行单元测试?

如何将发音相似的词放在一起