python 3.x“range”类的后端口

backports.range的Python项目详细描述


Unit TestsCode Coverage

PyPI PackagePyPI StatusPyPI VersionsPyPI Implementations

将Python3.7range类作为Python2.x^{tt1}的替代品进行后台移植$ 函数(以及python pre-3.7range类)。 range类类似于xrange,因为它的值是按需计算的- 但是,range类也是一个惰性序列: 它支持索引、成员资格测试和其他序列特征。

因此,它可以同时替换rangexrange

Features

此实现提供了在 python 3.6,并实现python3.5[1]和更高版本的collections.abc.Sequence接口。 range类可用作backports.range.range- 您可以将其导入到一个单独的名称或替换内置的range和/或xrange

# import for explicit usage
from backports.range import range as range3
values = range3(499, 501)
# as a lazy, reusable iterable
print(', '.join(values), 'and', ', '.join(values))
# as a lazy sequence
print(500 in values, 501 in values)
print(values[2], len(values))

在纯python实现中,默认情况下所有对象都可用。 此外,还可以使用Cython实现一个可选的优化实现。

Performance

对于大多数应用程序来说,backports.range在性能上是足够的。 当使用PyPyCython时,它的迭代速度与内置代码相当。 对于小于1000个元素的小范围,有一些小开销。 除了最高性能的应用程序之外,其他所有应用程序都不应该注意到这一点。

当使用cpython(也称为普通的python)时,纯python模式比内置模式慢得多。 同样,这对大多数应用程序都不重要,但强烈建议使用Cython$。

基准[a for a in range(...)]

Interpretervs Builtin rangevs Builtin xrange
Py250 - 10020 - 50
Py325 - 30
Py2 + Cython3 - 61.0 - 3
Py3 + Cython1.0 - 1.2
PyPy21.4 - 1.61.6 - 2.3
PyPy31.0 - 1.1

Cython Optimizations

后台端口具有一个Cython实现。 它在创建range类时被透明地使用。 它优化纯在clong long范围内的操作。[2]

所有Cython优化都是可选的。 如果安装了Cython,它们将自动可用。

Compatibility

  • 针对python 3.6unittests对range的特性进行了测试。
  • 以下python版本经过了显式测试:
    • cpython(又名python):2.62.73.23.33.43.53.63.7-dev
    • Cython:cpython支持的所有版本
    • PyPy:pypy2,pypy3
  • 为了兼容,还提供了一些附加功能:
    • backports.range.rangecompare的实例等于等价的builtin.rangeinstances(python 3.3中的新实例)
    • index方法符合python 3.5+规范collections.abc.Sequence[1]
  • 某些功能取决于语言功能或其他模块 可用或工作方式不同:
    • 在python 2.x中,比较range和其他类型不会抛出TypeError
    • 当可证明遇到builtin范围时,python实现在编译时使用自定义优化。 这些不能由后台端口复制。 注意,这只在高度优化的代码中才明显,无论如何都应该手动优化。

Status and Contributing

出于所有实际目的,后端口是完整的。 range类满足python 3.7的所有unittest,以及几个兼容性测试。 它是一个功能齐全的替代品,甚至适用于最新版本的python。

性能对于任何用例都应该是足够的。 backport在性能上与内置端口相当甚至相等。

如果您遇到任何问题,请前往issue tracker。 如果您认为可以改进代码库,请随时提交请求。

Notice

This packages includes parts of the python documentation (http://www.python.org) Copyright (C) 2001-2016 Python Software Foundation. Licensed under the Python Software Foundation License.
[1](1, 2) As of Python 3.6, the builtin ^{tt1}$ class is not compliant with the Python 3.5 specification of ^{tt9}$. See Issue 28197
[2]The ^{tt18}$ type should fill any current CPU architecture (read 64bit). Since Python cannot parallelize instructions, this should provide maximum range with optimal performance for small values.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java对网页中的信息进行排序   单击特定按钮打开特定图像的java(Android)   java如何从存储过程返回多行?   java JAXB混合版本?未定义的“必需”属性   java如何在EclipseIDE中打开一个类型的所有子类?   在java中使用Jtidy和Itext将html转换为pdf时未应用样式   应用程序加载失败时的java Spring事件/通知   java如何以相同的顺序在另一个列表中断言一个列表   java在5秒后加载新活动   线程“main”java中出现异常。lang.unsatifiedLinkError:java中没有数学。图书馆路径   java在节点上添加标签会忽略属于JavaFX中节点的MouseListener   javaxstream与继承