PEP 404 – Python 2.8 未发布计划
- 作者:
- Barry Warsaw <barry at python.org>
- 状态:
- 最终
- 类型:
- 信息性
- 主题:
- 发布
- 创建:
- 2011年11月9日
- Python 版本:
- 2.8
摘要
本文档描述了 Python 2.8 的未开发和未发布计划。
未发布管理者和团队
职位 | 姓名 |
---|---|
2.8 未发布管理者 | Cardinal Biggles |
未发布计划
当前的未发布计划是
- 2.8 最终版 从未发布
官方声明
规则六:没有官方的 Python 2.8 版本。永远不会有官方的 Python 2.8 版本。它是一个前版本。Python 2.7 是 Python 2 开发系列的终点。
升级路径
从 Python 2.7 升级的官方路径是到 Python 3。
现在是完全不同的东西
说正经的,有很多重要的原因导致不会有官方的 Python 2.8 版本,以及为什么您应该计划迁移到 Python 3。
Python(截至撰写本文时)已有 20 多年的历史,Guido 和社区在这些年中学习了很多东西。Guido 最初的 Python 3 概念是主要对语言进行更改,以消除先前版本中出现的缺陷。Python 3 不是彻底的重新设计,而是在语言演进的基础上,虽然明确地不保证与 Python 2 完全向后兼容,但也不接受语法或语义上的随意更改。在大多数情况下,Python 2 代码可以相当容易地转换为 Python 3,有时可以通过诸如 2to3 之类的工具完全机械地转换(也有一部分非平凡的语言子集可以在 2.7 和 3.x 上无需修改地运行)。
由于维护多个版本的 Python 会严重消耗 Python 开发人员的资源,并且由于 Python 3 中体现的语言和库的改进非常重要,因此决定以 Python 2.7 结束 Python 2 系列。因此,所有新的开发都发生在 Python 3 开发系列中,并且永远不会有官方的 Python 2.8 版本。但是,Python 2.7 将比通常的维护时间更长。
以下是一些 Python 3 中重大改进的亮点。您可以在 Python 2 和 Python 3 之间的差异 中阅读更多详细信息。还有许多关于 从 Python 2 移植到 Python 3 的优秀指南。
字符串和字节
Python 2 的基本原始字符串称为 8 位字符串,它们在 Python 2 中同时扮演 ASCII 文本和字节序列的双重角色。虽然 Python 2 也具有 unicode 字符串类型,但核心字符串类型的基本歧义性,加上 Python 2 在组合两种字符串时支持从 8 位字符串到 unicode 对象的自动强制转换的默认行为,通常会导致 UnicodeError
。Python 3 的标准字符串类型是基于 Unicode 的,Python 3 添加了一个专门的字节类型,但至关重要的是,没有提供字节和 unicode 字符串之间的自动强制转换。语言最接近隐式强制转换的是一些基于文本的 API,如果未明确说明编码,则假设默认编码(通常为 UTF-8)。因此,核心解释器、其 I/O 库、模块名称等在其对 unicode 字符串和字节的区别方面非常明确。Python 3 的 unicode 支持甚至扩展到文件系统,以便本机支持非 ASCII 文件名。
这种字符串/字节的清晰性通常是将现有代码迁移到 Python 3 时遇到的困难来源,因为许多第三方库和应用程序本身在这方面的区别不明确。但是,一旦迁移,大多数 UnicodeError
就可以消除。
数字
Python 2 具有两种基本整数类型,一种是本机机器大小的 int
类型,另一种是任意长度的 long
类型。这些在 Python 3 中合并为一个 int
类型,类似于 Python 2 的 long
类型。
此外,整数除法现在对非整数结果生成浮点数。
类
Python 2 具有两个核心类层次结构,通常称为经典类和新式类。后者允许从内置基本类型继承等操作,支持基于描述符的工具(如 property
内置函数),并提供了一个更合理且一致的系统来处理多重继承。Python 3 提供了完全放弃对经典类支持的机会,因此 Python 3 中的所有类都自动使用新式语义(尽管现在这是一个误称)。无需显式继承自 object
或将默认元类设置为启用它们(事实上,不再支持在模块级别设置默认元类 - 默认元类始终为 object
)。
显式指定元类的机制也已更改为使用类标题行中的 metaclass
关键字参数,而不是类体中的 __metaclass__
魔术属性。
多种拼写
在 Python 2 中,许多情况下存在某些构造的多种拼写,例如 repr()
和反引号,或两个不等式运算符 !=
和 <>
。在所有情况下,Python 3 都选择了一种拼写并删除了另一种(例如,保留了 repr()
和 !=
)。
导入
在 Python 3 中,不再可以使用包内的隐式相对导入 - 仅支持绝对导入和显式相对导入。此外,星号导入(例如 from x import *
)仅允许在模块级代码中使用。
此外,标准库的一些区域已重新组织,以使命名方案更直观。一些很少使用的内置函数已重新定位到标准库模块。
迭代器和视图
许多 API 在 Python 2 中返回具体的列表,而在 Python 3 中现在返回迭代器或轻量级视图。
版权
本文档已置于公共领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0404.rst