我在一个Python源代码中看到了一个字符串前有一个小的b,例如:
b"abcdef"
我知道在Python中使用u
前缀表示Unicode字符串,使用r
前缀表示原始字符串字面值。
b
是什么意思?它在哪些源代码中有用?因为它看起来与没有任何前缀的普通字符串完全相同。
我在一个Python源代码中看到了一个字符串前有一个小的b,例如:
b"abcdef"
我知道在Python中使用u
前缀表示Unicode字符串,使用r
前缀表示原始字符串字面值。
b
是什么意思?它在哪些源代码中有用?因为它看起来与没有任何前缀的普通字符串完全相同。
b
前缀表示bytes
字符串字面量。
如果你在Python 3源代码中看到它被使用,该表达式会创建一个bytes
对象,而不是普通的Unicode str
对象。如果你在Python shell中看到它被回显或作为列表、字典或其他容器内容的一部分出现,那么你看到的是用这种符号表示的bytes
对象。
bytes
对象基本上包含0-255范围内的整数序列,但在表示时,Python将这些字节显示为ASCII码点以便更容易读取其内容。任何超出可打印的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)
来完成同样的操作。b'..'
字符串字面语法创建字符串字面值,以简化在Python 2和3上都可用的代码。
bytes
对象是不可变的,就像str
字符串一样。如果需要具有可变字节值,则使用bytearray()
对象。