很多人诟病的python运行效率问题。我们来做个对比。
同样写一段斐波那契数列程序,对比一下以上几种语言的运行效率。
C程序:
#include <stdio.h>
#include <time.h>
int fib(int n)
{
if (n <= 1)
{
return n;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
int main()
{
clock_t start, end;
double cpu_time_used;
start = clock(); // 开始计时
int n;
printf("请输入一个整数: ");
scanf("%d", &n);
fib(n);
end = clock(); // 结束计时
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; // 计算时间
printf("程序执行时间为: %f seconds\n", cpu_time_used);
return 0;
}
C++程序:
#include <bits/stdc++.h>
#include <ctime>
#define CLOCK_PER_SEC 1000
using namespace std;
typedef long long ll;
ll step=0,cnt=0;
int Digui(ll step)
{
cnt++;
if(step==1||step==2)
{
return 1;
}
return Digui(step-1)+Digui(step-2);
}
int main()
{
clock_t start = clock();
Digui(40);
clock_t end = clock();
cout<<"花费了:"<<(double)(end-start)/CLOCK_PER_SEC<<"毫秒"<<endl;
return 0;
}
Go程序:
package main
import (
"fmt"
"time"
)
func Fib(n int) int {
if n == 1 || n == 2 {
return 1
}
return Fib(n-2) + Fib(n-1)
}
func main() {
now_t := time.Now()
Fib(40)
end_t := time.Now()
fmt.Println("时间差:", end_t.Sub(now_t))
}
python程序
import time
def fib(n):
if n == 1 or n == 2:
return 1
return fib(n - 1) + fib(n - 2)
if __name__ == '__main__':
start_time = time.time()
fib(40)
end_time = time.time()
print("消耗时间:",end_time-start_time)
python 编译成so文件,程序跟Python是一致的,只是把python编译成了so二级制,再调用执行:
算的是,40以内的斐波那契数列。C和C++编译时,使用的-03优化。还可以使用缓存优化,考虑到对比的公平性没有做。时间单位统一成了秒。其中C++和Go语言的运行时间,两次时间有点儿接近,采用多次运行取最大。
结论:C语言最快,Go语言性能跟C++接近,python可以编译成so执行会使效率提升3-4倍。python需要效率的地方,可以使用numpy或者pandas执行,由于是C开发的,效率更高。