问题:python字符串前的a前缀是什么意思?
在python源代码中,我偶然发现在类似如下的字符串之前看到一个小b:
b"abcdef"
我知道u
表示unicode字符串的r
前缀和原始字符串文字的前缀。
b
它看起来像一个没有任何前缀的纯字符串,它代表什么?在哪种源代码中有用?
回答 0
这是Python3 bytes
文字。在Python 2.5和更早版本中不存在此前缀(等效于2.x的纯字符串,而3.x的纯字符串等效u
于2.x中带前缀的文字)。在Python 2.6+中,它等效于纯字符串,以与3.x兼容。
回答 1
该b
前缀表示一个bytes
字符串常量。
如果您看到它在Python 3源代码中使用过,该表达式将创建一个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[0]
给你72
,但是value[:1]
是b'H'
作为72是用于大写字母的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()
对象。