现在我可能会在这里挑剔,但我想知道在大量迭代(假设没有内存限制)上计算效率更高,纯粹就运行整个程序所花费的时间而言。
我主要用两种语言python和c来询问,因为这些是我最常用的两种语言
例如在c中,类似于:
int count, sum = 0, 0;
while (count < 99999){
if (((pow(count, 2))/10)%10 == 4) {// just some random operation
sum += pow(count, 2);
}
count++;
}
或
int count, sum, temp = 0, 0, 0;
while (count < 99999){
temp = pow(count, 2)
if (((temp/10)%10 == 4) {// just some random operation
sum += temp;
}
count++;
}
在python中像
for i in range (99999):
n = len(str(i))
print "length of string", str(i), "is", n
或
for i in range (99999):
temp = str(i)
n = len(temp)
print "length of string:, temp, "is", n
现在这些只是我想到的随机操作,我的主要问题是创建新变量还是重复操作是否更好。我知道所需的计算能力会随着i
,count
的增加而变化,但只是对大量迭代进行推广会更好。
答案 0 :(得分:0)
我已使用timeit
在python中测试了您的代码,第一个选项的结果为1.0221271729969885
秒,第二个选项的结果为1.0154028950055363
我在每个例子中只进行了一次迭代就完成了这个测试,正如你所看到的,它们彼此非常接近,只需一次迭代就太接近可靠了。如果您想了解更多信息,我建议您使用timeit
但是,您在此处执行的操作是将temp
的变量分配替换为str(i)
的 2 ,而不是一个,并且它当然可以变化很大其他功能或多或少复杂且耗时str
答案 1 :(得分:0)
缓存确实可以在大多数情况下提高代码的性能和可读性。对于某些超快速操作可能存在极端情况,但是我会说第二个示例中使用的代码类型总是更好。
缓存值很可能存储在寄存器中,因此将涉及一个mov。根据{{3}},没有那么多便宜的操作。
至于可读性,考虑使用更多参数的更大函数调用,同时检查代码需要更多的脑力劳动来检查调用是否相同,而且如果函数更改它可能会引入一个调用已被修改的错误而另一个已被修改被遗忘(主要是因为Python)。
总而言之,它应该是可读性,在这种情况下推动您的选择,而不是性能提升。除非探查者指向这段代码。