程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

這就是為什麼選擇C語言不用python的原因!

編輯:Python

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倍的差距!

語言運行時間C2.295000 secondsPython52.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在不同方向上有很好應用場景:爬蟲、人工智能、自動化測試等方向都不錯~

最後如果喜歡就點一個愛心吧!感謝大家支持哦~


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved