【发布时间】:2011-03-14 10:43:53
【问题描述】:
考虑以下代码(来自here,随着测试数量的增加):
from timeit import Timer
def find_invpow(x,n):
"""Finds the integer component of the n'th root of x,
an integer such that y ** n <= x < (y + 1) ** n.
"""
high = 1
while high ** n < x:
high *= 2
low = high/2
while low < high:
mid = (low + high) // 2
if low < mid and mid**n < x:
low = mid
elif high > mid and mid**n > x:
high = mid
else:
return mid
return mid + 1
def find_invpowAlt(x,n):
"""Finds the integer component of the n'th root of x,
an integer such that y ** n <= x < (y + 1) ** n.
"""
low = 10 ** (len(str(x)) / n)
high = low * 10
while low < high:
mid = (low + high) // 2
if low < mid and mid**n < x:
low = mid
elif high > mid and mid**n > x:
high = mid
else:
return mid
return mid + 1
x = 237734537465873465
n = 5
tests = 1000000
print "Norm", Timer('find_invpow(x,n)', 'from __main__ import find_invpow, x,n').timeit(number=tests)
print "Alt", Timer('find_invpowAlt(x,n)', 'from __main__ import find_invpowAlt, x,n').timeit(number=tests)
使用 Python 2.6 (Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2),报告的时间为:
Norm 9.73663210869
Alt 9.53973197937
但是,在使用 Python 3.1 (Python 3.1.2 (r312:79147, Apr 15 2010, 15:35:48) [GCC 4.4.3] on linux2) 的同一台机器上,时间是:
Norm 28.4206559658
Alt 26.8007400036
有谁知道为什么这段代码在 Python 3.1 上运行速度要慢三倍?
【问题讨论】:
-
no repro:python3.1 在我的机器上比 2.6 快大约 30%。
-
谢谢。你在运行什么操作系统?我在 Ubuntu 10.04 64 位上得到了上述时间。
-
同系统32位版本
-
@Paul Baker:我在 Mac OS X 64 位(但使用 Python 3.1.1 32 位而不是 3.1.2)上的数字几乎与您相同。
-
@Paul:这些不是相同的代码,你忘了
from __future__ import division,没有一个,结果是不同的。虽然我不完全确定这是导致此问题的原因,但我怀疑它可能是。
标签: python performance python-3.x