Python程序慢的重要原因
Python慢的重要原因:
1、python是動態(tài)性語言不是靜態(tài)性語言
在python程序執(zhí)行的時候,編譯器不知道變量的類型。
2、python是解釋性語言而不是編譯性語言
解釋型語言與編譯型語言它們本身的區(qū)別也會造成程序在執(zhí)行的時候的速度差異。一個智能化的編譯器可以預測并針對重復和不需要的操作進行優(yōu)化。這也會提升程序執(zhí)行的速度。
3、 python的對象模型會導致訪問內(nèi)存效率低下
相對于C語言,在python中對整數(shù)進行操作會有一個額外的類型信息層。
當有很多的整數(shù)并且希望進行某種批操作時,在python中往往會使用一個list,而在C中會使用某個基于緩存區(qū)的數(shù)組。
內(nèi)容擴展:
Python一種動態(tài)類型,解釋性的語言,對于很多開發(fā)者來說,Python運行慢是眾所周知的事情,其萬物皆對象的特性,就是導致其運行慢的一個原因,這篇文章就是想聊聊這里面的一些細節(jié)。
慢的原因
由于各種原因,Python比Fortran和C語言慢。
動態(tài)類型
Pythn是動態(tài)類型而不是靜態(tài)類型的,這意味著,在程序執(zhí)行時,解釋器并不知道變量的類型。下圖可以用來說明C變量和Python變量的區(qū)別
對C語言來說,編譯器在聲明變量的時候就知道其類型了;對Python來說,程序執(zhí)行時只知道一個變量是某種Python對象。
對于下面的C代碼
int a = 1; int b = 2; int c = a + b;
編譯器始終知道a和b是整型,在執(zhí)行相加運算時,流程如下:
把<int> 1賦值給a
把<int> 2賦值給b
調(diào)用binary_add<int, int>(a, b)
把結果賦值給c
實現(xiàn)同樣功能的Python代碼如下
a = 1 b = 2 c = a + b
解釋器只知道1和2是對象,但是并不知道這個對象的類型。所以解釋器必須檢查每個變量的PyObject_HEAD才能知道變量類型,然后執(zhí)行對應的相加操作,最后要創(chuàng)建一個新的Python對象來保存返回值,大致流程如下:
把1賦值給a
- 設置a->PyObject_HEAD->typecode為整型
- 設置a->val = 1
把2賦值給b
- 設置a->PyObject_HEAD->typecode為整型
- 設置b->val = 2
調(diào)用binary_add<int, int>(a, b)
- a->PyObject_HEAD獲取類型編碼
- a是一個整型;值為a->val
- b->PyObject_HEAD獲取類型編碼
- b是一個整型,值為b->val
- 調(diào)用binary_add<int, int>(a->val, b->val)
- 結果為整型,存在result中
創(chuàng)建對象c
設c->PyObject_HEAD->typecode為整型
設置c->val為result
動態(tài)類型意味著任何操作都會涉及更多的步驟。這是Python對數(shù)值操作比C語言慢的主要原因
到此這篇關于Python程序慢的重要原因的文章就介紹到這了,更多相關Python慢的重要原因內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python解決“argument?after?*?must?be?an?iterable”報錯問題
這篇文章主要介紹了Python解決“argument?after?*?must?be?an?iterable”報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12Python操作PostgreSql數(shù)據(jù)庫的方法(基本的增刪改查)
這篇文章主要介紹了Python操作PostgreSql數(shù)據(jù)庫(基本的增刪改查),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Python中的map()函數(shù)和reduce()函數(shù)的用法
這篇文章主要介紹了Python中的map()函數(shù)和reduce()函數(shù)的用法,代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04淺談python圖片處理Image和skimage的區(qū)別
這篇文章主要介紹了淺談python圖片處理Image和skimage的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08