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

时间:2010-04-07 13:28:37

标签: python syntax python-3.x byte

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

b"abcdef"

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

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

2 个答案:

答案 0 :(得分:77)

b前缀表示bytes string literal

如果您在Python 3源代码中看到它使用,则表达式会创建bytes object,而不是常规Unicode str object。如果您在Python shell中或在列表,dict或其他容器内容中看到它回显,那么您会看到使用此表示法表示的bytes对象。

bytes个对象基本上包含0-255范围内的整数序列,但在表示时,Python将这些字节显示为ASCII码点,以便更容易阅读其内容。 可打印范围的ASCII字符之外的任何字节都显示为转义序列(例如\n\x82等)。相反,您可以使用ASCII字符和转义序列来定义字节值;对于ASCII值,使用其数值(例如b'A' == b'\x41'

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

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

并且索引会返回整数(但切片会产生新的bytes值;对于上面的示例,value[1]会为您提供101,但value[:1]为{{} 1}} 72是大写字母 H )的ASCII代码点。

b'H'模型二进制数据,包括编码文本。如果您的bytes值确实包含文本,则需要先使用正确的编解码器对其进行解码。例如,如果数据编码为UTF-8,则可以使用以下命令获取Unicode bytes值:

str

相反,要从strvalue = bytesvalue.decode('utf-8') 对象中的文字转到str,您需要编码。您需要决定要使用的编码;默认是使用UTF-8,但您需要的是高度依赖于您的用例:

bytes

您也可以使用构造函数bytesvalue = strvalue.encode('utf-8') 来执行相同的操作。

解码和编码方法都需要额外参数specify how errors should be handled

Python 2,版本2.6和2.7还支持使用bytes(strvalue, encoding)字符串文字语法创建字符串文字,以简化适用于Python 2和3的代码。

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

答案 1 :(得分:57)

这是Python3 bytes literal。 Python 2.5及更早版本中没有此前缀(它相当于2.x的纯字符串,而3.x的纯字符串相当于2.x中带有u前缀的文字)。在Python 2.6+中,它等同于普通字符串for compatibility with 3.x