与 Java 或 C 相比,为什么 Python 代码需要这么长时间才能循环
counter = 0
q = pow(2, 16) - 1
m = pow(2,20)
z = 7 * 16 ** 3 + 12 * 16 ** 2
for cs in range(q + 1):
for addr in range(q + 1):
if (cs*16 + addr) % m == z:
counter += 1
print(counter)
在速度上与 C 中的同类比较
int main(){
int counter = 0;
int q = (int) pow(2, 16)-1;
int m = (int) pow(2,20);
int cs;
for (cs = 0; cs <= q ; cs++) {
int addr;
for (addr = 0; addr <= q ; addr++) {
if ((cs * 16 + addr) % m == 0x7c00){
counter++;
}
}
}
printf("%d\n",counter);
return 0;
}
为什么循环需要这么长时间才能完成,我不会回答,因为你已经得到了回答。此外,我怀疑这比“如何解决这个问题?”这个问题的答案更让你担心......
使用Numba:
我的执行速度结果是0.30512189865112305秒!
Python 速度慢的原因(不仅在周期上很慢,而且在一般情况下):
GIL(Global Interpreter Lock,全局解释器锁),但这不适用于本例
Python 是一种解释型语言,而不是一种编译型语言(每次迭代都必须再次解释所有语句)
动态类型(浪费时间进行类型检查)
更多细节在这里和这里。
与 C 甚至 Java 不同,Python 是一种解释型语言,而不是编译型语言。在此处添加动态类型,这也不会增加速度。这是执行速度减慢的地方。
当然,在其他条件不变的情况下,这一切都是真实的。
很多仍然取决于算法本身的实现。也可以在汇编程序中编写一个循环,使其运行速度比在同一个 Python 中解决类似问题的另一种算法慢。