在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前缀表示bytesstring文字 。

如果您看到它在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上工作的代码。