1

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

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

我知道这意味着bytes在 Python 3 中返回一个字节数组,正如我在这里找到的。我相信代码是为 Python 3.3 编写的,并试图弄清楚它在其他版本中的工作原理(在我的例子中是 2.7

问题:

  • 在哪些版本的 python 中b'myString'“工作”?
  • 它在 python 2.x 中的表现如何?
  • 它在 python 3.x 中的表现如何?
  • 这与字节文字变化有关吗?
4

1 回答 1

6

这在您链接的文档中都有描述。

  • 在什么版本的 python 中b'myString'“工作”?:2.6+。
  • 它在 python 2.x 中的表现如何?它创建了一个字面量——这与2.xbytes中的字面量完全相同。str
  • 它在 python 3.x 中的表现如何?它创建了一个bytes字面量——这与3.x 中的字面量不同str
  • 这与字节文字变化有关吗?是的。这就是重点;它可以让你编写“未来兼容”的代码——或者在 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)。

于 2013-07-17T18:50:19.053 回答