PEP 260 – 简化 xrange()
- 作者:
- Guido van Rossum <guido at python.org>
- 状态:
- 最终
- 类型:
- 标准跟踪
- 创建:
- 2001年6月26日
- Python 版本:
- 2.2
- 历史记录:
- 2001年6月26日
摘要
本 PEP 提案从一些很少使用的行为(如 x[i:j]
和 x*n
)中移除 xrange()
对象。
问题
xrange()
函数有一种惯用的用法
for i in xrange(...): ...
然而,xrange()
对象有一些很少使用的行为,这些行为试图使其更像序列。这些行为非常少用,以至于历史上它们存在严重的错误(例如,越界错误),这些错误在几个版本中都没有被发现。
我认为最好放弃这些未使用的特性。这将简化实现、测试和文档,并减少维护和代码大小。
提议的解决方案
我建议将 xrange()
对象精简到最低限度。唯一保留的序列行为是 x[i]
、len(x)
和 repr(x)
。特别是,以下行为将被删除
x[i:j]
(切片)x*n
、n*x
(序列重复)cmp(x1, x2)
(比较)i in x
(包含测试)x.tolist()
方法x.start
、x.stop
、x.step
属性
我还建议更改 PyRange_New()
C API 的签名,以移除第四个参数(重复次数)。
通过实现自定义迭代器类型,我们可以加快常用用法,但这可选(默认序列迭代器也能正常工作)。
范围
此 PEP 影响 xrange()
内置函数和 PyRange_New()
C API。
风险
某些人的代码可能依赖于扩展代码,而这些代码将被破坏。但是,鉴于历史上扩展代码中的错误长期未被发现,因此不太可能有很多代码受到影响。
过渡
为了向后兼容,Python 2.2 中仍将存在现有功能,但会触发警告。在 Python 2.2 最终版本发布一年后(可能在 2.4 中),该功能将被移除。
版权
本文档已进入公有领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0260.rst