【发布时间】:2019-03-05 07:53:07
【问题描述】:
我目前正在比较 Python3 和 C 中的两个循环计算。对于 Python,我有:
# Python3
t1 = time.process_time()
a = 100234555
b = 22333335
c = 341500
for i in range(1, 10000000001):
a = a - (b % 2)
b = b - (c % 2)
print("Sum is", a+b)
t2 = time.process_time()
print(t2-t1, "Seconds")
然后在 C 中,我做同样的事情:
#include <stdio.h>
int main() {
long long a = 100234555;
long long b = 22333335;
long long c = 341500;
for(long long i = 1; i <= 10000000000; i++){
a = a - (b % 2);
b = b - (c % 2);
}
printf("Sum is %lld\n", a+b);
return 0;
}
我对 Python 和 C 中的代码都进行了计时。Python 的计时大约是 3500 秒,而 C 中的计时(包括编译和执行)只需要大约 0.3 秒。
我想知道时间上怎么会有这么大的差异。执行是在具有 100 GB 内存和足够处理能力的服务器上完成的。
【问题讨论】:
-
有趣。如果将 % 替换为按位 & 1 会怎样?是不是一样慢?
-
因为 C 是在本机机器代码中编译的,已针对您当前的架构进行了高度优化并直接在硬件上运行,而 Python 是一种解释型语言,不做任何事情。
-
@skyboyer 注意用
&1替换%2在C 中创建不同的功能。%2导致1,0,-1。&1导致1,0。 -
@chux,谢谢,不知道。当它返回-1时,你能给我举个例子吗?只是好奇,第一次尝试找不到
-
@skyboyer
printf("%d\n", -1%2);见What's the difference between “mod” and “remainder”?。
标签: python c python-3.x