作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Python 3 在最小循环的枚举中似乎比 Python 2 慢得多,而且随着 Python 3 的更新版本,这种情况似乎变得更糟。
我在 64 位 Windows 机器(Intel i7-2700K - 3.5 GHz)上安装了 Python 2.7.6、Python 3.3.3 和 Python 3.4.0,并且安装了每个 Python 的 32 位和 64 位版本。虽然在内存访问的限制范围内,给定版本的 32 位和 64 位之间的执行速度没有显着差异,但不同版本级别之间存在非常显着的差异。我会让计时结果不言自明,如下所示:
C:\**Python34_64**\python -mtimeit -n 5 -r 2 -s"cnt = 0" "for i in range(10000000): cnt += 1"
5 loops, best of 2: **900 msec** per loop
C:\**Python33_64**\python -mtimeit -n 5 -r 2 -s"cnt = 0" "for i in range(10000000): cnt += 1"
5 loops, best of 2: **820 msec** per loop
C:\**Python27_64**\python -mtimeit -n 5 -r 2 -s"cnt = 0" "for i in range(10000000): cnt += 1"
5 loops, best of 2: **480 msec** per loop
C:\**Python27_64**\python -mtimeit -n 5 -r 2 -s"cnt = 0" "for i in **xrange**(10000000): cnt += 1"
5 loops, best of 2: **320 msec** per loop
最佳答案
差异是由于更换了int
输入 long
类型。显然,长整数运算会变慢,因为 long
操作比较复杂。
如果您通过设置 cnt
强制 python2 使用 longs至 0L
差异消失了:
$python2 -mtimeit -n5 -r2 -s"cnt=0L" "for i in range(10000000): cnt += 1L"
5 loops, best of 2: 1.1 sec per loop
$python3 -mtimeit -n5 -r2 -s"cnt=0" "for i in range(10000000): cnt += 1"
5 loops, best of 2: 686 msec per loop
$python2 -mtimeit -n5 -r2 -s"cnt=0L" "for i in xrange(10000000): cnt += 1L"
5 loops, best of 2: 714 msec per loop
range
的两个 python2 都快并使用
xrange
使用时
long
s。 python 的最后一个基准测试 2
xrange
表明这种情况下的差异很小。
range
),所以时间应该大致相同。如果您看到显着差异,请尝试使用
dis
检查生成的字节码模块。内存分配器(
PEP 445 )发生了变化,但我不知道是否修改了默认内存分配器以及对性能有哪些影响。
关于python - Python 3 的枚举速度是否比 Python 2 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23453133/
我是一名优秀的程序员,十分优秀!