python做后端速度慢吗_【后端开发】python为什么慢?
Python一種動態類型,解釋性的語言,對于很多開發者來說,Python運行慢是眾所周知的事情,其萬物皆對象的特性,就是導致其運行慢的一個原因,下面本篇文章就來給大家介紹一下python慢的一些原因,希望對你們有所幫助。
python是動態性語言不是靜態性語言
這是說在python程序執行的時候,編譯器不知道變量的類型。在C中編譯器知道變量在定義時的類型,而python中執行的時候只知道它是一個對象。
因此,如果您在C中編寫以下內容:
/ * C代碼* /
int a = 1 ;
int b = 2 ;
int c = a + b ;
C編譯器從一開始就知道a并且b是整數:它們根本不可能是其他任何東西!有了這些知識,它可以調用添加兩個整數的例程,返回另一個整數,它在內存中只是一個簡單的值。
在C中執行的流程大概如下:
1、 分配1給a;
2、分配2給b;
3、 調用二進制加法binary_add(a, b)(a, b);
4、將結構分配給c變量
python中等效的代碼如下:
# python code
a = 1
b = 2
c = a + b
這里解釋器只知道1和2是對象,但不知道它們是什么類型的對象。 因此解釋器必須檢查每個變量的PyObject_HEAD以找到類型信息,然后為這兩種類型調用適當的求和例程。 最后,它必須創建并初始化一個新的Python對象來保存返回值。
執行流程大致如下:
1、分配1給a
(1)設置a->PyObject_HEAD->typecode為整數
(2)設置Seta->val = 1
2、分配2給b
(1)設置b->PyObject_HEAD->typecode為整數
(2)設置b->val = 2
3、調用二進制加法binary_add(a, b)
(1)找到類型代碼 a->PyObject_HEAD
(2)a是整數,值為a->val
(3)找到類型代碼 b->PyObject_HEAD
(4)b是整數,值為b->val
(5)調用二進制加法binary_add(a->val, b->val)
(6)結果是result,是一個整數。
4、創建一個新的對象c
(1)設置c->PyObject_HEAD->typecode為整數
(2)將c->val分配給結果
動態類型意味著任何操作都需要更多的步驟。這是Python在數值數據操作方面比C慢的主要原因。
python是解釋性語言而不是編譯性語言
解釋型語言與編譯型語言它們本身的區別也會造成程序在執行的時候的速度差異。一個智能化的編譯器可以預測并針對重復和不需要的操作進行優化。這也會提升程序執行的速度。
Python的對象模型會帶來低效的內存訪問
在上面的例子中,相對于C語言,在python中對整數進行操作會有一個額外的類型信息層。當有很多的整數并且希望進行某種批操作時,在python中往往會使用一個list,而在C中會使用某個基于緩存區的數組。在Numpy數組的最簡單的形式是一個圍繞著C中的數組建的一個python對象。也就是說Numpy有一個指針指向連續緩存區數據的值,而在python中,python列表有一個只想緩存區的指針,每個指針都指向一個python緩存對象,而且每個對象都綁定一個數據(本例中是整數)。
這兩種情況的原理圖:
從上圖可以很明顯的看出,當對數據進行操作時(例如排序、計算、查找等),無論是在存續成本還是訪問成本上,Numpy都比python更加的高效。
總結
以上是生活随笔為你收集整理的python做后端速度慢吗_【后端开发】python为什么慢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word vba高效排版范例应用_收藏
- 下一篇: python怎么检查数据库实例能否链接_