Python 字符串前的 ab 前缀是什么意思?
- 2025-01-09 08:47:00
- admin 原创
- 107
问题描述:
在我偶然发现的 Python 源代码中,我看到字符串前面有一个小写的b ,如下所示:
b"abcdef"
我知道表示u
Unicode字符串的前缀和r
表示原始字符串文字的前缀。
它代表什么b
以及在哪种源代码中有用,因为它看起来就像一个没有任何前缀的普通字符串?
解决方案 1:
前缀b
表示bytes
字符串文字。
如果您看到它在 Python 3 源代码中使用,则该表达式会创建一个bytes
对象,而不是常规的Unicodestr
对象。如果您看到它在 Python shell 中回显或作为列表、字典或其他容器内容的一部分,那么您会看到bytes
使用此符号表示的对象。
bytes
对象基本上包含 0-255 范围内的整数序列,但在表示时,Python 会将这些字节显示为ASCII 代码点,以便于读取其内容。任何超出可打印ASCII 字符范围的字节都显示为转义序列(例如`、
x82等)。相反,您可以使用 ASCII 字符和转义序列来定义字节值;对于 ASCII 值,使用它们的数值(例如
b'A'==
b'x41'`)
因为bytes
对象由整数序列组成,所以您可以bytes
从任何其他值在 0-255 范围内的整数序列构造对象,就像列表一样:
bytes([72, 101, 108, 108, 111])
索引会返回整数(但切片会生成一个新bytes
值;对于上面的例子,value[0]
返回72
,但value[:1]
由于72 是大写字母Hb'H'
的 ASCII 代码点)。
bytes
对二进制数据(包括编码文本)进行建模。如果您的bytes
值确实包含文本,则需要先使用正确的编解码器对其进行解码。例如,如果数据编码为 UTF-8,则可以str
使用以下命令获取 Unicode 值:
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()
对象。
解决方案 2:
这是 Python3bytes
文字。此前缀在 Python 2.5 及更早版本中不存在(它相当于 2.x 的纯字符串,而 3.x 的纯字符串相当于u
2.x 中带前缀的文字)。在 Python 2.6+ 中,它相当于纯字符串,以兼容3.x。