Python字符串"b"前缀(字节文字)

Ste*_*han 1 python arrays string literals

我正在查看一些单元测试代码,我发现了这个:

self.assertIn(b'Hello', res.body)
Run Code Online (Sandbox Code Playgroud)

我知道这意味着bytes在Python 3中返回一个字节数组,正如我在这里找到的那样.我相信代码是为Python 3.3编写的,我试图弄清楚它在其他版本中是如何工作的(在我的情况下是2.7)我发现的相关问题有一个写得很糟糕的接受答案,其中含有令我困惑的相互矛盾的评论.

问题:

  • 在什么版本的python b'myString'"工作"?
  • 它在python 2.x中的表现如何?
  • 它在python 3.x中的表现如何?
  • 这与字节文字更改有关吗?

aba*_*ert 6

这已在您链接的文档中描述.

  • 什么版本的python b'myString'"工作"?:2.6+.
  • 它在python 2.x中的表现如何?它创建了一个bytes文字 - 这与str2.x中的文字完全相同.
  • 它在python 3.x中的表现如何?它创建了一个bytes文本,这是一样的东西作为一个str在3.x的字面
  • 这与字节文字更改有关吗?是.这就是重点; 它允许您编写"未来兼容"的代码或代码,无论是在2.6+还是3.0+中都可以使用2to3.

引用您链接的部分中的第一段:

为了将来的兼容性,Python 2.6添加bytes了该str类型的同义词,它还支持b''表示法.

请注意,正如它说几行,Python 2.x bytes/ str与Python 3.x的类型不完全相同bytes:"最值得注意的是,构造函数完全不同".但是字节文字是相同的,除了在边缘情况下你将Unicode字符放入字节文字(在2.x中没有明确的含义,但做一些任意的,有时可能恰好是你所希望的,在3.x中它是有保证的SyntaxError).