我编写了以下程序作为Project Euler问题12的解决方案,但在Python 2.7中需要6.62秒,在Python 3.2中需要10.21秒。当然应该反过来了!
import time
def mainrun():
start = time.time()
divnum = 0
i = 0
trinum = 0
while divnum < 501:
i += 1
trinum += i
divnum = 0
#2nd arg outside - no diff to speed
for j in range(1, int(trinum**.5)+1):
if trinum % j == 0:
divnum += 1
if trinum / j != j:
divnum += 1
print(trinum, '\nDivisors:', divnum)
print('Solved in', round((time.time()-start),2), 'seconds.')
mainrun()
有谁知道为什么后来的Python版本会变慢?
答案 0 :(得分:3)
除了更精确的计时,Martijn Pieters建议,其中一个原因可能是简陋的/
,其definition changed在Python版本之间:
Python 2.7:
>>> 5/2
2
>>> from __future__ import division
>>> 5/2
2.5
Python 3.0:
>>> 5/2
2.5
>>> 5//2
2
使用Python 2案例的from __future__
语句重新尝试时间。
答案 1 :(得分:2)
Python3 int类型以前是Python2 long类型。多头比整数慢。 Python针对简单而非速度进行了优化。