从 py2 到 py3 的字节行为变化
Posted
技术标签:
【中文标题】从 py2 到 py3 的字节行为变化【英文标题】:Behavior change of bytes from py2 to py3 【发布时间】:2013-09-04 15:17:21 【问题描述】:在this question 进行讨论后,我很好奇。看来bytes()
的行为在 python3 中发生了变化。在the docs for py3 中,它现在被列为内置函数,其行为与bytearray()
相同,但结果是不可变的。它不会出现在 py2 文档中的相同位置。
在浏览文档一段时间后,我真的找不到任何详细说明从 2 更改为 3 的内容,但看起来肯定有。有什么不同,为什么要改变?
从 cmets 中的链接问题有人就 py3 发表评论
bytes(1) 返回 b'00'
但在 2.7.5 中
>>> bytes(1)
'1'
【问题讨论】:
docs.python.org/3.0/whatsnew/… 在python2中,bytes
是 str
【参考方案1】:
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
【讨论】:
如果bytes()
与str()
同义,那么它在Python 2 中的用途是什么?
@Brian:我猜这是为了衡量与 Python3 的相似性,但显然它会引起混淆......以上是关于从 py2 到 py3 的字节行为变化的主要内容,如果未能解决你的问题,请参考以下文章