在Pythonstring之前的前缀是什么?
在一个python源代码中,我偶然发现了一个string之前的小b :
b"abcdef"
我知道u
前缀表示一个unicodestring, r
前缀为一个原始string文字。
b
什么样的源代码是有用的,因为它似乎完全像一个没有任何前缀的纯string?
这是Python3 bytes
文字 。 这个前缀在Python2.5和更旧的版本中是不存在的(它相当于一个普通的2.xstring,而3.x的普通string相当于在2.x中带有u
前缀的文字)。 在Python 2.6+中,它相当于一个纯string, 与3.x兼容 。
b
前缀表示bytes
string文字 。
如果您看到它在Python 3源代码中使用,则expression式会创build一个bytes
对象 ,而不是一个常规的Unicode str
对象 。 如果您看到它在您的Python shell中回显或作为列表,dict或其他容器内容的一部分,那么您会看到使用此表示法表示的bytes
对象。
bytes
对象基本上包含0-255范围内的整数序列,但是在表示时,Python将这些字节显示为ASCII代码点,以便更容易地阅读其内容。 ASCII字符可打印范围以外的任何字节都显示为转义序列(例如\n
, \x82
等)。
bytes
模型二进制数据 ,包括编码文本 。 如果您的bytes
值包含文本,则需要先使用正确的编解码器对其进行解码。 例如,如果数据编码为UTF-8,则可以通过以下方式获取Unicode str
值:
strvalue = bytesvalue.decode('utf-8')
Python 2版本2.6和2.7还支持使用b'..'
string文字语法创buildstring文字,以便轻松开发可在Python 2和Python 3上工作的代码。