1. 程式人生 > >Python解釋執行原理

Python解釋執行原理

1. 過程概述

Python先把程式碼(.py檔案)編譯成位元組碼,交給位元組碼虛擬機器,然後虛擬機器一條一條執行位元組碼指令,從而完成程式的執行。

2. 位元組碼

位元組碼在Python虛擬機器程式裡對應的是PyCodeObject物件。
.pyc檔案是位元組碼在磁碟上的表現形式。

3. pyc檔案

PyCodeObject物件的建立時機是模組載入的時候,即import。
Python test.py會對test.py進行編譯成位元組碼並解釋執行,但是不會生成test.pyc。
如果test.py載入了其他模組,如import util,Python會對util.py進行編譯成位元組碼,生成util.pyc,然後對位元組碼解釋執行。
如果想生成test.pyc,我們可以使用Python內建模組py_compile來編譯。
載入模組時,如果同時存在.py和.pyc,Python會嘗試使用.pyc,如果.pyc的編譯時間早於.py的修改時間,則重新編譯.py並更新.pyc。

4. PyCodeObject

Python程式碼的編譯結果就是PyCodeObject物件。

C
1234567891011121314151617181920typedefstruct{PyObject_HEADintco_argcount;/* 位置引數個數 */intco_nlocals;/* 區域性變數個數 */intco_stacksize;/* 棧大小 */intco_flags;PyObject*co_code;/* 位元組碼指令序列 */PyObject*co_consts;/* 所有常量集合 */PyObject*co_names;
/* 所有符號名稱集合 */PyObject*co_varnames;/* 區域性變數名稱集合 */PyObject*co_freevars;/* 閉包用的的變數名集合 */PyObject*co_cellvars;/* 內部巢狀函式引用的變數名集合 *//* The rest doesn’t count for hash/cmp */PyObject*co_filename;/* 程式碼所在檔名 */PyObject*co_name;/* 模組名|函式名|類名 */intco_firstlineno;/* 程式碼塊在檔案中的起始行號 */PyObject*co_lnotab;/* 位元組碼指令和行號的對應關係 */void*co_zombieframe
;/* for optimization only (see frameobject.c) */}PyCodeObject;

5. pyc檔案格式

載入模組時,模組對應的PyCodeObject物件被寫入.pyc檔案,格式如下:

6. 分析位元組碼

6.1 解析PyCodeObject

Python提供了內建函式compile可以編譯Python程式碼和檢視PyCodeObject物件,如下:

Python程式碼[test.py]

C
1 2 3 4 5 6 7

相關推薦

python解釋執行原理(轉載)

劃分 解釋器 轉換成 http 解釋型 輸出 行程 保護 相對 Python解釋執行原理   轉自:http://l62s.iteye.com/blog/1481421 這裏的解釋執行是相對於編譯執行而言的。我們都知道,使用C/C++之類的編譯性語言編寫的程序

Python解釋執行原理

1. 過程概述 Python先把程式碼(.py檔案)編譯成位元組碼,交給位元組碼虛擬機器,然後虛擬機器一條一條執行位元組碼指令,從而完成程式的執行。 2. 位元組碼 位元組碼在Python虛擬機器程式裡對應的是PyCodeObject物件。 .pyc檔案是位元組碼在磁碟上的表現形式

python程序執行原理

技術 進行 state head 行號 線程 當前 compile for Python程序的執行原理 1. 過程概述 Python先把代碼(.py文件)編譯成字節碼,交給字節碼虛擬機,然後解釋器一條一條執行字節碼指令,從而完成程序的執行。 1.1python先把代碼

python執行原理(簡單版說明)

不是計算機專業出身,對於這種原理實在是不是很好理解 簡單來說,程式設計語言劃分為兩大類:編譯型語言和解釋型語言。 其實Python和Java/C#一樣,也是一門基於虛擬機器的語言(先編譯後解釋)的直譯器型別 執行過程如下: python: .py  -->.py

Python程式執行原理(科普)

程式執行原理(科普) 目標 計算機中的 三大件 程式執行的原理 程式的作用 01. 計算機中的三大件 計算機中包含有較多的硬體,但是一個程式要執行,有 三個 核心的硬體,分別是: CPU 中央處理器,是一塊超大規模的積

Python解釋執行原理

python python解釋器 Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte code(字節碼), 然後再由Python Virtual Machine(Python虛擬機)來執行這些編譯好的byte code。 這種機制的基本思想跟Java,.NET是一致的。 然

Hadoop架構設計、執行原理具體解釋

下一個 發現 job調度 mmap tin 文件復制 必須 new 最大 1、Map-Reduce的邏輯過程 如果我們須要處理一批有關天氣的數據。其格式例如以下: 依照ASCII碼存儲。每行一條記錄每一行字符從0開始計數,第15個到第18個字符為年第25個到第29個字

Python代碼是編譯執行還是解釋執行

負責 details tro style cnblogs 無需 可移植性 port 字節碼 轉載地址:http://blog.csdn.net/zv3e189os5c0tsknrbcl/article/details/78661641 有人在討論 Python 代碼是編

關於python代碼是編譯執行還是解釋執行

過程 自然 必須 都是 指令 運行時 移植 機器 桌子 Python 是編譯型語言還是解釋型語言?回答這個問題前,應該先弄清楚什麽是編譯型語言,什麽是解釋型語言。 所謂編譯執行就是源代碼經過編譯器編譯處理,生成目標機器碼,就是機器能直接運行的二進制代碼,下次運

Python程序的執行原理

global ref 直接 src 閉包 () 有符號 vars globals 1. 過程概述 Python先把代碼(.py文件)編譯成字節碼,交給字節碼虛擬機,然後虛擬機一條一條執行字節碼指令,從而完成程序的執行。 2. 字節碼 字節碼在Python虛擬機程序裏對應的是

SpringMVC執行原理及介面解釋

1.Spring MVC概述: Spring MVC是Spring提供的一個強大而靈活的web框架。藉助於註解,Spring MVC提供了幾乎是POJO的開發模式,使得控制器的開發和測試更加簡單。這些控制器一般不直接處理請求,而是將其委託給Spring上下文中的其他bean,通過Spring

Python如何執行程式-原理

Python是一門程式語言,也是一個名為直譯器的軟體包。 直譯器是程式碼與機器的計算機硬體之間的軟體邏輯層 Python直譯器是執行python的程式的程式,Python直譯器將讀取程式,並按照其中的命令執行,得出結果。 錄入的原始碼轉換為位元組碼,之後位元組碼

Python執行緒的原理與實現

Python多執行緒原理與實戰 目的: (1)瞭解python執行緒執行原理 (2)掌握多執行緒程式設計與執行緒同步 (3)瞭解執行緒池的使用 1 執行緒基本概念 1.1 執行緒是什麼? 執行緒是指程序內的一個執行單元,也是程序內的可排程實體. 與程序的區別:

python編譯過程和執行原理

一、編譯過程概述  當我們執行Python程式碼的時候,在Python直譯器用四個過程“拆解”我們的程式碼,最終被CPU執行返回給使用者。  首先當用戶鍵入程式碼交給Python處理的時候會先進行詞法分析,例如使用者鍵入關鍵字或者當輸入關鍵字有誤時,都會被詞法分析所觸發,不正確的程式碼將不會被執行。  下一步

解釋作業系統原理中的作業,程序,執行緒,管程各自的定義。程序間的通訊如何實現?

作業:使用者在一次解題或一個事務處理過程中要求計算機系統所做工作的集合。它包括使用者程式、所需要的資料及控制命令等。作業是由一系列有序的步驟組成的。 程序:一個程式在一個數據集上的一次執行過程。所以一個程式在不同資料集合上執行,乃至一個程式在同樣資料集合上多次

python筆記:#006#程式執行原理

程式執行原理(科普) 目標 計算機中的 三大件 程式執行的原理 程式的作用 01. 計算機中的三大件 計算機中包含有較多的硬體,但是一個程式要執行,有 三個 核心的硬體,分別是: CPU 中央處理器,是一塊超大規模的積體電路 負責 處

Python程式碼是編譯執行還是解釋執行

有人在討論 Python 程式碼是編譯執行還是解釋執行?這個問題還可以換一種說法: Python 是編譯型語言還是解釋型語言?回答這個問題前,我們先弄清楚什麼是編譯型語言,什麼是解釋型語言。 所謂編譯執行就是原始碼經過編譯器編譯處理,生成目標機器碼,就是機器能直接執行的

Python隨筆(三)虛擬機器執行原理

開發十年,就只剩下這套架構體系了! >>>   

python執行cmd的方式

ble open blog cli return 窗口 images about 定向 目前我使用到的python中執行cmd的方式有三種: 1. 使用os.system("cmd") 這是最簡單的一種方法,特點是執行的時候程序會打出cmd在Linux上執行的信息。使用

關於onclick的執行原理

元素 jquery 父節點 之前 單選 onclick事件 集成 結構 出現 js 或者 jQuery 為文檔某一節點添加onclick事件的時候,添加的onclick事件會添加在原節點的onclick事件之後,不會覆蓋之前的onclick事件 如果不想讓原onclick