1、c比python快的原因
c是編譯型語言,編譯器直接將c的源碼編譯成機器語言運行,和像python、java這種解釋型語言比減少了運行時解釋翻譯的時間,提高運行效率,其次c語言是沒有像java語言的垃圾回收機制的,需要自行釋放,降低本身內耗,也會提高其的執行效率。
2、實驗證明
下面我們分別使用c語言和python語言分別進行指定大小的累加求和來比較運行時間效率高低
#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);
}
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 seconds4、Python如何使用C的代碼提升計算效率
如果需求是需要只能使用python實現但是又要追求c語言的執行速度那該怎麼辦呢,其實依然有辦法解決,目前我了解的有以下幾個辦法提升python的速度:
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在不同方向上有很好應用場景:爬蟲、人工智能、自動化測試等方向都不錯~
最後如果喜歡就點一個愛心吧!感謝大家支持哦~