国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python程序運行原理圖文解析

2020-02-22 23:11:50
字體:
來源:轉載
供稿:網友

本文研究的主要是Python程序運行原理,具體介紹如下。

編譯型語言(C語言為例)

動態型語言

一個程序是如何運行起來的?比如下面的代碼

#othermodule.pydef add(a, b):  return a + b#mainrun.pyimport othermodulea = ['xiaoke', 1, 'python']a = 'xiaoke string'def func():  a = -5  b = 257   print(a + b)print(a)if __name__ == '__main__':  func()  res = othermodule.add(1, 2)  print(res)

分析

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文件三大作用

    創建時間,py文件比pyc文件新,則從新生成pyc magic num做運行前版本檢測,版本不同從新生成pyc PyCodeObject 對象

在運行期間,編譯結果也就是 PyCodeObject 對象,只會存在于內存中,而當這個模塊的 Python 代碼執行完后,就會將編譯結果保存到了 pyc 文件中,這樣下次就不用編譯,直接加載到內存中。

這個 PyCodeObject 對象包含了 Python 源代碼中的字符串,常量值,以及通過語法解析后編譯生成的字節碼指令。PyCodeObject 對象還會存儲這些字節碼指令與原始代碼行號的對應關系,這樣當出現異常時,就能指明位于哪一行的代碼。

import 指令

import 指令是用來載入 module 的,如果需要,也會順道做編譯的事。但 import 指令,還會做一件重要的事情就是把 import 的那個 module 的代碼執行一遍,這件事情很重要。
Python 是解釋執行的,連函數都是執行的時候才創建的。如果不把那個 module 的代碼執行一遍,那么 module 里面的函數都沒法創建,更別提去調用這些函數了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德令哈市| 长宁区| 滨州市| 颍上县| 大埔县| 宜阳县| 泊头市| 黄石市| 威宁| 南昌县| 德庆县| 怀集县| 图们市| 社旗县| 白山市| 东乡县| 凌海市| 石阡县| 开原市| 扬中市| 屏山县| 都安| 沁源县| 虎林市| 琼结县| 习水县| 潼关县| 赤城县| 崇义县| 遵义县| 汉寿县| 沙湾县| 昭平县| 青岛市| 浦东新区| 益阳市| 华蓥市| 连平县| 绥宁县| 广元市| 铜梁县|