从 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 的字节行为变化的主要内容,如果未能解决你的问题,请参考以下文章

Python基础面试题

python基础篇10-py2和py3编码

py2和py3之间的不同

dir 全局名称未定义(py2 到 py3 迁移)

py3与py2的问题以及encode问题

从 iOS 13.6.1 升级到 iOS 14 时应用行为发生变化