这就是为什么选择C语言不用python的原因

1、c比python快的原因

        c是编译型语言,编译器直接将c的源码编译成机器语言运行,和像python、java这种解释型语言比减少了运行时解释翻译的时间,提高运行效率,其次c语言是没有像java语言的垃圾回收机制的,需要自行释放,降低本身内耗,也会提高其的执行效率。

7ea49dbeca7f444e8108de7a485d1823.png

 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)

        比对的运行结果如下:

38c51c9c54304637826389323f270c4b.png

 6、简单聊聊python的优点

        虽然python的执行效率远低于c语言,但是我个人依然非常喜欢python这门语言,并且目前python在不同方向上有很好应用场景:爬虫、人工智能、自动化测试等方向都不错~

最后如果喜欢就点一个爱心吧!感谢大家支持哦~

猜你喜欢

转载自blog.csdn.net/m0_43432638/article/details/126030084