Python程式執行原理解釋

2021-08-02 17:32:48 字數 1988 閱讀 2680

乙個程式是如何執行起來的?比如下面的**

dir 函式

python 的內建函式 dir 可以用來檢視乙個命名空間下的所有名字符號。乙個用處是檢視乙個命名空間的所有屬性和方法(這裡的命名空間就是指類、函式、module)。

比如,檢視當前的命名空間,可以使用 dir(),檢視 sys 模組,可以使用 dir(sys)

def 指令

def func(),在位元組碼指令中就是 make_function。

python 是動態語言,def 實際上是執行一條指令,用來建立函式

(class 則是建立類的指令),而不僅僅是個語法關鍵字。

函式並不是事先建立好的,而是執行到的時候才建立的。

def func() 將會建立乙個名稱為 func 的函式物件。

實際上是先建立乙個函式物件,然後將 func 這個名稱符號繫結到這個函式上。

pyc檔案

pyc 檔案是 pycodeobject 物件在硬碟上的表現形式。生成pyc檔案:

python -m py_compile xx_module.py
pyc檔案三大作用

在執行期間,編譯結果也就是 pycodeobject 物件,只會存在於記憶體中,而當這個模組的 python **執行完後,就會將編譯結果儲存到了 pyc 檔案中,這樣下次就不用編譯,直接載入到記憶體中。

這個 pycodeobject 物件包含了 python 源**中的字串,常量值,以及通過語法解析後編譯生成的位元組碼指令。pycodeobject 物件還會儲存這些位元組碼指令與原始**行號的對應關係,這樣當出現異常時,就能指明位於哪一行的**。

import 指令

import 指令是用來載入 module 的,如果需要,也會順道做編譯的事。但 import 指令,還會做一件重要的事情就是把 import 的那個 module 的**執行一遍,這件事情很重要。

python 是解釋執行的,連函式都是執行的時候才建立的。如果不把那個 module 的**執行一遍,那麼 module 裡面的函式都沒法建立,更別提去呼叫這些函式了。

執行**的另外乙個重要作用,就是在這個 module 的命名空間中,建立模組內定義的函式和各種物件的符號名稱(也就是變數名),並將其繫結到物件上,這樣其他 module 才能通過變數名來引用這些物件。

python 虛擬機器還會將已經 import 過的 module 快取起來,放到乙個全域性 module 集合 sys.modules 中。

這樣做有乙個好處,即如果程式的在另乙個地方再次 import 這個模組,python 虛擬機器只需要將全域性 module 集合中快取的那個 module 物件返回即可。

Python程式執行原理

執行步驟大概如下 1.作業系統會讓cpu把python直譯器的程式複製到記憶體中。2.python直譯器會根據語法規則,從上向下讓cpu翻譯python中的 3.cpu負責執行翻譯完的 python直譯器有多大?拷貝到記憶體中是否會對記憶體有較大影響?1.確認直譯器所在位置 which python...

FFT原理解釋

fft是離散傅利葉變換的快速演算法,可以將乙個訊號變換 到頻域。有些訊號在時域上是很難看出什麼特徵的,但是如 果變換到頻域之後,就很容易看出特徵了。這就是很多訊號 分析採用fft變換的原因。另外,fft可以將乙個訊號的頻譜 提取出來,這在頻譜分析方面也是經常用的。雖然很多人都知道fft是什麼,可以用...

git原理解釋

工作區域 git本地有三個工作區域 工作目錄 working directory 暫存區 stage index 本地倉庫 repository或git directory 如果在加上遠端的git倉庫 remote directory 就可以分成四個工作區域。檔案在這四個區域之間的轉換關係如下。wo...