我正在查看一些单元测试代码,我发现了这个:
self.assertIn(b'Hello', res.body)
我知道这意味着 bytes在 Python 3 中 returns a byte array ,正如我发现的那样 here .我相信该代码是为 Python 3.3 编写的,并且我试图弄清楚它在其他版本(在我的例子中是 2.7)中是如何工作的 related question我发现有一个被接受的答案写得不好,里面有矛盾的评论,这让我很困惑。
问题:
b'myString'在什么版本的 python 中“工作”?- 它在 python 2.x 中的表现如何?
- 它在 python 3.x 中的表现如何?
- 这与 byte literal change 有关系吗? ?
请您参考如下方法:
这一切都在您链接的文档中进行了描述。
b'myString'在什么版本的 python 中“工作”?:2.6+。- 它在 python 2.x 中的表现如何? 它创建一个
bytes字面量——这与 2.x 中的str字面量完全相同。 - 它在 python 3.x 中的表现如何? 它创建一个
bytes字面量——不与 3.x 中的str字面量相同。 - 这与字节字面量的变化有关吗? 是的。这就是重点;它让您可以编写“ future 兼容”的代码——或者无需
2to3即可在 2.6+ 和 3.0+ 中运行的代码。
引用您链接部分的第一段:
For future compatibility, Python 2.6 adds
bytesas a synonym for thestrtype, and it also supports the b'' notation.
请注意,正如下面几行所说,Python 2.x bytes/str 与 Python 3.x bytes 的类型不完全相同:“最值得注意的是,构造函数完全不同”。但是字节文字是相同的,除了在将 Unicode 字符放入字节文字的边缘情况下(它在 2.x 中没有定义的含义,但有时会做一些随意的事情,这可能恰好是你所希望的,而在 3.x 中它是有保证的 SyntaxError)。
