Python 字符串前面的 b 前缀是什么意思?

在我偶然发现的一个 python 源代码中,我在一个字符串之前看到了一个小的 B,比如:

b"abcdef"

我知道表示 unicode 字符串的 u前缀和表示原始字符串文字的 r前缀。

b代表什么? 它在哪种类型的源代码中是有用的,因为它看起来就像一个没有任何前缀的普通字符串?

81907 次浏览

这是 Python 3 bytes 字面意思。这个前缀在 Python 2.5及以上版本中不存在(它相当于2.x 的普通字符串,而3.x 的普通字符串相当于2.x 中带有 u前缀的文本)。在 Python 2.6 + 中,它相当于一个简单的字符串 与3.x 的兼容性

b前缀表示 bytes字符串文字

如果您在 Python3源代码中看到它的使用,那么该表达式将创建一个 bytes物体,而不是一个常规的 Unicode str对象。如果您看到它在 Python shell 中回显,或者作为列表、 dict 或其他容器内容的一部分,那么您将看到使用此表示法表示的 bytes对象。

bytes对象基本上包含0-255范围内的整数序列,但是当表示时,Python 将这些字节显示为 ASCII 码位,以便于读取它们的内容。< em > printable ASCII 字符范围之外的任何字节都显示为转义序列(例如 \n\x82等)。相反,您可以使用 ASCII 字符和转义序列来定义字节值; 对于 ASCII 值,使用它们的数值(例如 b'A' = = b'\x41')

因为 bytes对象由一个整数序列组成,所以您可以从任何其他值在0-255范围内的整数序列构造一个 bytes对象,如列表:

bytes([72, 101, 108, 108, 111])

索引会返回整数(但是切片会产生一个新的 bytes值; 对于上面的例子,value[0]给出 72,但是 value[:1]b'H',因为72是大写字母 H的 ASCII 代码点)。

bytes二进制数据,包括 编码文本。如果 bytes值确实包含文本,则需要首先使用正确的编解码器对其进行解码。例如,如果数据编码为 UTF-8,则可以使用以下方法获取 Unicode str值:

strvalue = bytesvalue.decode('utf-8')

相反,要从 str对象中的文本转换到 bytes,则需要 编码。您需要决定使用哪种编码; 默认情况下使用 UTF-8,但是您将需要什么高度依赖于您的用例:

bytesvalue = strvalue.encode('utf-8')

您也可以使用构造函数 bytes(strvalue, encoding)来做同样的事情。

解码和编码方法都需要向 指定如何处理错误添加额外的参数。

Python 2,2.6和2.7版本也支持使用 b'..'字符串文本语法创建字符串文本,以简化在 Python 2和3上运行的代码。

bytes对象是不可变的,就像 str字符串一样。如果需要可变的字节值,请使用 bytearray()对象