91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于python編譯過程和執行原理的詳細分析

發布時間:2020-07-27 10:59:12 來源:億速云 閱讀:240 作者:清晨 欄目:編程語言

不懂關于python編譯過程和執行原理的詳細分析?其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。

python編譯過程和執行原理

(1)python執行原理

這里的解釋執行是相對于編譯執行而言的。我們都知道,使用C/C++之類的編譯性語言編寫的程序,是需要從源文件轉換成計算機使用的

機器語言,經過鏈接器鏈接之后形成了二進制的可執行文件。運行該程序的時候,就可以把二進制程序從硬盤載入到內存中并運行。

但是對于Python而言,python源碼不需要編譯成二進制代碼,它可以直接從源代碼運行程序。當我們運行python文件程序的時候,

python解釋器將源代碼轉換為字節碼,然后再由python解釋器來執行這些字節碼。這樣,python就不用擔心程序的編譯,庫的鏈接加載

等問題了。

對于python解釋語言,有以下3方面的特性:

每次運行都要進行轉換成字節碼,然后再有虛擬機把字節碼轉換成機器語言,最后才能在硬件上運行。與編譯性語言相比,每次多出了編

譯和鏈接的過程,性能肯定會受到影響;而python并不是每次都需要轉換字節碼,解釋器在轉換之前會判斷代碼文件的修改時間是否與

上一次轉換后的字節碼pyc文件的修改時間一致,若不一致才會重新轉換。

由于不用關心程序的編譯和庫的鏈接等問題,開發的工作也就更加輕松啦。

python代碼與機器底層更遠了,python程序更加易于移植,基本上無需改動就能在多平臺上運行。

在具體計算機上實現一種語言,首先要確定的是表示該語言語義解釋的虛擬計算機,一個關鍵的問題是程序執行時的基本表示是實際計算

機上的機器語言還是虛擬機的機器語言。這個問題決定了語言的實現。根據這個問題的回答,可以將程序設計語言劃分為兩大類:編譯型

語言和解釋型語言。

編譯實現的語言,如:C、C++、Fortran、Pascal、Ada。由編譯型語言編寫的源程序需要經過編譯,匯編和鏈接才能輸出目標代碼,然

后由機器執行目標代碼。目標代碼是有機器指令組成,不能獨立運行,因為源程序中可能使用了一些匯編程序不能解釋引用的庫函數,而

庫函數又不在源程序中,此時還需要鏈接程序完成外部引用和目標模板調用的鏈接任務,最后才能輸出可執行代碼。

解釋型語言,解釋器不產生目標機器代碼,而是產生中間代碼,這種中間代碼與機器代碼不同,中間代碼的解釋是由軟件支持的,不能

直接使用在硬件上。該軟件解釋器通常會導致執行效率較低,用解釋型語言編寫的程序是由另一個可以理解中間代碼的解釋程序執行的。

和編譯的程序不同的是, 解釋程序的任務是逐一將源代碼的語句解釋成可執行的機器指令,不需要將源程序翻譯成目標代碼再執行。對于

解釋型語言,需要一個專門的解釋器來執行該程序,每條語句只有在執行是才能被翻譯,這種解釋型語言每執行一次就翻譯一次,因而效

率低下。

Java解釋器,java很特殊,java是需要編譯的,但是沒有直接編譯成機器語言,而是編譯成字節碼,然后在Java虛擬機上用解釋的方式執

行字節碼。Python也使用了類似的方式,先將python編譯成python字節碼,然后由一個專門的python字節碼解釋器負責解釋執行字節

碼。

python是一門解釋語言,但是出于效率的考慮,提供了一種編譯的方法。編譯之后就得到pyc文件,存儲了字節碼。python這點和java

很類似,但是java與python不同的是,python是一個解釋型的語言,所以編譯字節碼不是一個強制的操作,事實上,編譯是一個自動的

過程,一般不會在意它的存在。編譯成字節碼可以節省加載模塊的時間,提高效率。

除了效率之外,字節碼的形式也增加了反向工程的難度,可以保護源代碼。這個只是一定程度上的保護,反編譯還是可以的。

(2)Python內部執行過程

一、編譯過程概述

當我們執行Python代碼的時候,在Python解釋器用四個過程“拆解”我們的代碼,最終被CPU執行返回給用戶。

首先當用戶鍵入代碼交給Python處理的時候會先進行詞法分析,例如用戶鍵入關鍵字或者當輸入關鍵字有誤時,都會被詞法分析所觸

發,不正確的代碼將不會被執行。

下一步Python會進行語法分析,例如當"for i in test:"中,test后面的冒號如果被寫為其他符號,代碼依舊不會被執行。

下面進入最關鍵的過程,在執行Python前,Python會生成.pyc文件,這個文件就是字節碼,如果我們不小心修改了字節碼,Python下次

重新編譯該程序時會和其上次生成的字節碼文件進行比較,如果不匹配則會將被修改過的字節碼文件進行覆蓋,以確保每次編譯后字節碼

的準確性。

那么什么是字節碼?字節碼在Python虛擬機程序里對應的是PyCodeObject對象。.pyc文件是字節碼在磁盤上的表現形式。簡單來說就是

在編譯代碼的過程中,首先會將代碼中的函數、類等對象分類處理,然后生成字節碼文件。有了字節碼文件,CPU可以直接識別字節碼文

件進行處理,接著Python就可執行了。

感謝你能夠認真閱讀完這篇文章,希望小編分享關于python編譯過程和執行原理的詳細分析內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太原市| 河间市| 临海市| 柳林县| 历史| 浮梁县| 秦安县| 合阳县| 平乡县| 许昌县| 屏山县| 梧州市| 石门县| 丰都县| 汝阳县| 武安市| 越西县| 宁国市| 克拉玛依市| 耿马| 定陶县| 绥芬河市| 隆子县| 承德县| 资溪县| 康定县| 石家庄市| 沭阳县| 那坡县| 白玉县| 疏附县| 同德县| 张家口市| 齐齐哈尔市| 周宁县| 扶沟县| 汶上县| 鄂伦春自治旗| 广水市| 孟州市| 图们市|