非常简单的程序,但为什么在 c++ 和 python 中会有如此大的不同?

0 c++ python

我认为这两个程序功能几乎相同,但是python程序运行时间超过70秒,但是c++运行速度非常快。我不明白有什么区别?

测试1.py

import time
x = [(i%10) for i in range(10000)]
y = [(i%10) for i in range(10000)]
start = time.time()
for i in range(10000):
    if(i % 100 == 0): print("Current on %d"%i)
    for j in range(10000):
            r2 = (x[i]-x[j])**2 + (y[i]-y[j])**2

print(time.time()-start)
Run Code Online (Sandbox Code Playgroud)

测试2.cpp

#include <iostream>
#include <time.h>

int main(){
    float x[10000];
    float y[10000];
    time_t start, end;

    for(int i=0;i<10000;i++){
            x[i] = i%10;
            y[i] = i%10;
    }
    start = time(NULL);

    for(int i=0;i<10000;i++){
            if(i % 100 == 0) std::cout<<"Current on"<<i<<"\n";
            for(int j=0;j<10000;j++){
                    float r2 = (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
            }
    }
    end = time(NULL);
    double result = double(end-start);
    printf("%f\n",result);

}
Run Code Online (Sandbox Code Playgroud)

Qui*_*mby 6

可能有以下几个原因:

  • 它们是紧密的循环,与 C++ 相比,python 将有大量的解释器开销。
  • Python 代码使用Integer数组,它们是无界类型,但相当快,C++ 浮点数可能会更快。
  • 内循环无关紧要,启用优化的 C++ 编译器将删除它。-O1似乎对 gcc 来说已经足够了,请参阅. 启用警告后,它甚至会警告r2未使用的。