日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python做后端速度慢吗_【后端开发】python为什么慢?

發布時間:2025/4/17 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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为什么慢?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。