Python程序慢的重要原因
Python慢的重要原因:
1、python是動(dòng)態(tài)性語(yǔ)言不是靜態(tài)性語(yǔ)言
在python程序執(zhí)行的時(shí)候,編譯器不知道變量的類(lèi)型。
2、python是解釋性語(yǔ)言而不是編譯性語(yǔ)言
解釋型語(yǔ)言與編譯型語(yǔ)言它們本身的區(qū)別也會(huì)造成程序在執(zhí)行的時(shí)候的速度差異。一個(gè)智能化的編譯器可以預(yù)測(cè)并針對(duì)重復(fù)和不需要的操作進(jìn)行優(yōu)化。這也會(huì)提升程序執(zhí)行的速度。
3、 python的對(duì)象模型會(huì)導(dǎo)致訪問(wèn)內(nèi)存效率低下
相對(duì)于C語(yǔ)言,在python中對(duì)整數(shù)進(jìn)行操作會(huì)有一個(gè)額外的類(lèi)型信息層。
當(dāng)有很多的整數(shù)并且希望進(jìn)行某種批操作時(shí),在python中往往會(huì)使用一個(gè)list,而在C中會(huì)使用某個(gè)基于緩存區(qū)的數(shù)組。
內(nèi)容擴(kuò)展:
Python一種動(dòng)態(tài)類(lèi)型,解釋性的語(yǔ)言,對(duì)于很多開(kāi)發(fā)者來(lái)說(shuō),Python運(yùn)行慢是眾所周知的事情,其萬(wàn)物皆對(duì)象的特性,就是導(dǎo)致其運(yùn)行慢的一個(gè)原因,這篇文章就是想聊聊這里面的一些細(xì)節(jié)。
慢的原因
由于各種原因,Python比Fortran和C語(yǔ)言慢。
動(dòng)態(tài)類(lèi)型
Pythn是動(dòng)態(tài)類(lèi)型而不是靜態(tài)類(lèi)型的,這意味著,在程序執(zhí)行時(shí),解釋器并不知道變量的類(lèi)型。下圖可以用來(lái)說(shuō)明C變量和Python變量的區(qū)別
對(duì)C語(yǔ)言來(lái)說(shuō),編譯器在聲明變量的時(shí)候就知道其類(lèi)型了;對(duì)Python來(lái)說(shuō),程序執(zhí)行時(shí)只知道一個(gè)變量是某種Python對(duì)象。
對(duì)于下面的C代碼
int a = 1; int b = 2; int c = a + b;
編譯器始終知道a和b是整型,在執(zhí)行相加運(yùn)算時(shí),流程如下:
把<int> 1賦值給a
把<int> 2賦值給b
調(diào)用binary_add<int, int>(a, b)
把結(jié)果賦值給c
實(shí)現(xiàn)同樣功能的Python代碼如下
a = 1 b = 2 c = a + b
解釋器只知道1和2是對(duì)象,但是并不知道這個(gè)對(duì)象的類(lèi)型。所以解釋器必須檢查每個(gè)變量的PyObject_HEAD才能知道變量類(lèi)型,然后執(zhí)行對(duì)應(yīng)的相加操作,最后要?jiǎng)?chuàng)建一個(gè)新的Python對(duì)象來(lái)保存返回值,大致流程如下:
把1賦值給a
- 設(shè)置a->PyObject_HEAD->typecode為整型
- 設(shè)置a->val = 1
把2賦值給b
- 設(shè)置a->PyObject_HEAD->typecode為整型
- 設(shè)置b->val = 2
調(diào)用binary_add<int, int>(a, b)
- a->PyObject_HEAD獲取類(lèi)型編碼
- a是一個(gè)整型;值為a->val
- b->PyObject_HEAD獲取類(lèi)型編碼
- b是一個(gè)整型,值為b->val
- 調(diào)用binary_add<int, int>(a->val, b->val)
- 結(jié)果為整型,存在result中
創(chuàng)建對(duì)象c
設(shè)c->PyObject_HEAD->typecode為整型
設(shè)置c->val為result
動(dòng)態(tài)類(lèi)型意味著任何操作都會(huì)涉及更多的步驟。這是Python對(duì)數(shù)值操作比C語(yǔ)言慢的主要原因
到此這篇關(guān)于Python程序慢的重要原因的文章就介紹到這了,更多相關(guān)Python慢的重要原因內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 實(shí)現(xiàn)快速生成連續(xù)、隨機(jī)字母列表
今天小編就為大家分享一篇python 實(shí)現(xiàn)快速生成連續(xù)、隨機(jī)字母列表,具有很好的價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
檢測(cè)tensorflow是否使用gpu進(jìn)行計(jì)算的方式
今天小編就為大家分享一篇檢測(cè)tensorflow是否使用gpu進(jìn)行計(jì)算的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
windows10下安裝TensorFlow Object Detection API的步驟
這篇文章主要介紹了windows10下安裝TensorFlow Object Detection API的步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
基于Python第三方插件實(shí)現(xiàn)西游記章節(jié)標(biāo)注漢語(yǔ)拼音的方法
這篇文章主要介紹了基于Python第三方插件實(shí)現(xiàn)西游記章節(jié)標(biāo)注漢語(yǔ)拼音的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
11個(gè)并不被常用但對(duì)開(kāi)發(fā)非常有幫助的Python庫(kù)
這篇文章主要介紹了11個(gè)并不被常用但對(duì)開(kāi)發(fā)非常有幫助的Python庫(kù),這些庫(kù)大都被放在Github上開(kāi)源、并且經(jīng)過(guò)一段時(shí)間的編寫(xiě)和維護(hù),對(duì)Python開(kāi)發(fā)有一定的幫助,需要的朋友可以參考下2015-03-03
Python操作RabbitMQ服務(wù)器實(shí)現(xiàn)消息隊(duì)列的路由功能
RabbitMQ是一個(gè)消息隊(duì)列服務(wù)器,這里我們針對(duì)Python+Pika+RabbitMQ的服務(wù)器端環(huán)境,來(lái)看一下如何使用Python操作RabbitMQ服務(wù)器實(shí)現(xiàn)消息隊(duì)列的路由功能2016-06-06

