1、c比python快的原因
c是编译型语言,编译器直接将c的源码编译成机器语言运行,和像python、java这种解释型语言比减少了运行时解释翻译的时间,提高运行效率,其次c语言是没有像java语言的垃圾回收机制的,需要自行释放,降低本身内耗,也会提高其的执行效率。
2、实验证明
下面我们分别使用c语言和python语言分别进行指定大小的累加求和来比较运行时间效率高低
- C代码实现
#include<stdio.h>
#include<time.h>
int add(int num)
{
int sum = 0;
for (int i = 0; i < num; i++)
{
sum +=i;
}
return sum;
}
int main() {
clock_t start, end;
start = clock();
add(1000000000);
end = clock();
printf("%f seconds\n",(double)(end - start) / CLOCKS_PER_SEC);
}
- Python代码实现
import time
def test1(num):
sum = 0
for x in range(num):
sum+=x
return sum
if __name__ == '__main__':
print("测试python代码")
start = time.time()
test1(1000000000)
end = time.time()
print (end-start)
3、结果
测试结果如下单位是秒,其实结果还是很惊人的,大家可能都知道c语言的执行速度远高于python,但是没想到会快这么多,差不多25倍的差距!
语言 | 运行时间 |
C | 2.295000 seconds |
Python | 52.89267 seconds |
4、Python如何使用C的代码提升计算效率
如果需求是需要只能使用python实现但是又要追求c语言的执行速度那该怎么办呢,其实依然有办法解决,目前我了解的有以下几个办法提升python的速度:
- 优化代码
- 多线程并行计算
- 预编译py文件为pyc
- 动态库或静态库调用C
5、扩展(python如何调用c编译的动态库文件)
windos下安装好微软或者gcc、mingw等编译器,这里我就不过多说明安装步骤了,百度有很多安装教程 ,确保安装后我们需要创建一个add.c的文件,然后附上如下代码:
#include<stdio.h>
int add(int num)
{
int sum = 0;
for (int i = 0; i < num; i++)
{
sum +=i;
}
return sum;
}
编写代码并确保可运行状态下,我们需要将其制作成windos可运行的动态库文件dll(linux下为.so文件)
# 编译动态库
gcc -c add.c -o add.o -fPIC
gcc -shared -o libadd.dll add.o
编译成功后会在本文件夹下生成.dll动态库文件,我们需要使用python调用动态库文件并使用add求和函数。
# python调用
from ctypes import *
def test2():
add = CDLL('libadd.dll')
nResult = add.add(10000000)
最后我们将python原生的求和和调用c动态库的求和进行比对
import time
from ctypes import *
add1 = CDLL('libadd.dll')
def test1(num):
sum = 0
for x in range(num):
sum+=x
return sum
def test2(num):
nResult = add1.add(num)
if __name__ == '__main__':
print("测试python代码")
start = time.time()
test1(1000000000)
end = time.time()
print (end-start)
print("测试动态库代码")
start1 = time.time()
test2(1000000000)
end2 = time.time()
print (end2-start1)
比对的运行结果如下:
6、简单聊聊python的优点
虽然python的执行效率远低于c语言,但是我个人依然非常喜欢python这门语言,并且目前python在不同方向上有很好应用场景:爬虫、人工智能、自动化测试等方向都不错~
最后如果喜欢就点一个爱心吧!感谢大家支持哦~