【发布时间】:2017-12-03 23:13:48
【问题描述】:
现在我可能在这里吹毛求疵,但我想知道仅就运行整个程序所需的时间而言,在大量迭代(假设对内存没有限制)中哪个计算效率更高。
我主要问的是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 的增加而改变,但只是针对大量迭代进行推广,这样会更好。
【问题讨论】:
-
这取决于:很多。通常,答案是再次执行操作更昂贵,但对于某些事情(例如 C 中用于字节交换或其他任务的按位操作),操作可能更便宜。通常,如果您担心性能并执行一次操作,我会创建新变量。如果您真的需要知道,唯一的长期答案是分析您的代码。
-
幸运的是 Python 有一个
timeit模块可以准确地回答这个问题。 -
假设 C 编译器不知道 pow() 没有副作用,它将无法优化第二次调用。从编译器的角度来看,这两段代码具有不同的行为。想象一下 pow() 本身称为 printf();第一个示例偶尔会打印两行,第二个示例不会。我们知道 pow() 没有副作用,所以我们必须进行相应的编程。
标签: python c memory-management computation