以下是两段简单的代码,分别使用C#
和Python
编写(如果你对这个进程感到好奇,它是Project Euler问题5的解决方案)。
我的问题是,下面的C#
代码只需9秒即可迭代完成,而完成Python
代码需要283秒(确切地说,Python 3.4.3 - 64位需要283秒,Python 2.7.9 - 32位需要329秒)。
到目前为止,我已经编写了类似的C#
和Python
进程,并且执行时间差异是可以比较的。但是这一次,经过的时间差异极大。
我认为,这种差异的一部分来自于Python语言的灵活变量类型(我怀疑,Python会将一些变量转换为double),但这仍然很难解释。
我做错了什么?
我的系统:Windows-7 64位,
C#-VS Express 2012(9秒)
Python 3.4.3 64位(283秒)
Python 2.7.9 32位(329秒)
C#代码:
using System;
namespace bug_vcs {
class Program {
public static void Main(string[] args) {
DateTime t0 = DateTime.Now;
int maxNumber = 20;
bool found = false;
long start = maxNumber;
while (!found) {
found = true;
int i = 2;
while ((i < maxNumber + 1) && found) {
if (start % i != 0) {
found = false;
}
i++;
}
start++;
}
Console.WriteLine("{0:d}", start - 1);
Console.WriteLine("time elapsed = {0:f} sec.", (DateTime.Now - t0).Seconds);
Console.ReadLine();
}
}
}
以及 Python 代码:
from datetime import datetime
t0 = datetime.now()
max_number = 20
found = False
start = max_number
while not found:
found = True
i = 2
while ((i < max_number + 1) and found):
if (start % i) != 0:
found = False
i += 1
start += 1
print("number {0:d}\n".format(start - 1))
print("time elapsed = {0:f} sec.\n".format((datetime.now() - t0).seconds))
StopWatch
而不是DateTime
。 - juharrtimeit
。 - jonrsharpepypy
(http://pypy.org):`python3.4` -> 286秒,pypy
-> 10秒。 - Ned Deily