行为从py2到py3的字节变化

时间:2013-09-04 15:17:22

标签: python python-2.7 python-3.x casting

this question的讨论之后,我很好奇。似乎bytes()的行为在python3中发生了变化。在the docs for py3中,它现在被列为内置函数,其行为与bytearray()相同,除非结果是不可变的。它在py2文档中没有出现在同一个地方。

在通过文档挖掘一段时间后,我无法找到任何详细说明从2变为3的内容,但看起来确实有些东西。有什么不同,为什么会改变?

来自评论中关于py3的评论中的链接问题

  

bytes(1)返回b'00'

但在2.7.5

>>> bytes(1)
'1'

1 个答案:

答案 0 :(得分:4)

Python 3 bytes构造函数采用可选的int参数,指定要输出的字节数。使用该构造函数将所有字节初始化为0(\x00),因此bytes(1) == b'\x00'

Python 2 bytes构造函数与str相同,因此只是将其参数字符串化:

Python 2.7.5 (v2.7.5:ab05e7dd2788, May 13 2013, 13:18:45) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> bytes is str
True