gpt4 book ai didi

python - 为什么对于这段代码,Python 3.1 比 2.6 慢?

转载 作者:太空狗 更新时间:2023-10-30 01:10:29 27 4
gpt4 key购买 nike

考虑以下代码(来自 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,2010 年 4 月 15 日,15:35:48)[GCC 4.4.3] on linux2)的同一台机器上,时间是:

Norm 28.4206559658
Alt 26.8007400036

有谁知道为什么这段代码在 Python 3.1 上运行速度慢了三倍?

最佳答案

从 2.5、2.6、2.7 和 3.1 (Windows XP SP2) 到“/”版本,我的时间稳步减少。使用//,3.1 倍明显小于 2.X 倍,例如“标准”从 6.35 (py2.7) 下降到 3.62 (py3.1)。

请注意,在 2.x 中,有 int(机器字,32 或 64 位)和 long(可变长度)。在 3.x 中,long 已更名为 int,int 消失了。我的猜测是,从 long 转换为 float 可能会导致/的额外时间。

无论如何,一个更好的“Alt”版本应该从这个代码开始:

high = 1
highpown = 1
while highpown < x:
high <<= 1
highpown <<= n

关于python - 为什么对于这段代码,Python 3.1 比 2.6 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222554/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com