PEP 260 – 简化 xrange()
- 作者:
- Guido van Rossum <guido at python.org>
- 状态:
- 最终版
- 类型:
- 标准跟踪
- 创建日期:
- 2001年6月26日
- Python 版本:
- 2.2
- 发布历史:
- 2001年6月26日
摘要
本PEP提议从xrange()对象中剥离一些很少使用的行为,例如x[i:j]和x*n。
问题
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的签名,以删除第4个参数(重复计数)。
通过实现自定义迭代器类型,我们可以加快常见用法的速度,但这是可选的(默认的序列迭代器工作得很好)。
范围
本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