Python字符串“b”前缀(字节文字)

时间:2013-07-17 18:08:22

标签: python arrays string literals

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

self.assertIn(b'Hello', res.body)

我知道这意味着Python 3中的bytes returns a byte array,我发现here。我相信这段代码是为Python 3.3编写的,我试图弄清楚它在其他版本中是如何工作的(在我的例子中是2.7)我发现的related question有一个写得不好的答案,其中有相互矛盾的评论使我困惑

问题:

  • 在哪个版本的python b'myString'“工作”?
  • 它在python 2.x中的表现如何?
  • 它在python 3.x中的表现如何?
  • 这是否与byte literal change
  • 有关

1 个答案:

答案 0 :(得分:6)

这已在您链接的文档中进行了描述。

  • 在哪个版本的python中b'myString'“工作”?: 2.6 +。
  • 它在python 2.x中的表现如何? 它会创建一个bytes字面值 - 这与2.x中的str字面值完全相同。
  • 它在python 3.x中的表现如何? 它会创建一个bytes字面值 - 与3.x中的str字面值相同。
  • 这是否与字节文字更改有关? 是。这就是重点;它允许您编写“未来兼容”的代码或代码,无需2to3即可在2.6+和3.0+中运行。

从您关联的部分的第一段引用:

  

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

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