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

首頁 > 編程 > Python > 正文

初步探究Python程序的執行原理

2020-02-23 00:39:17
字體:
來源:轉載
供稿:網友

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對象。

typedef struct {  PyObject_HEAD  int co_argcount;    /* 位置參數個數 */  int co_nlocals;     /* 局部變量個數 */  int co_stacksize;    /* 棧大小 */  int co_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;   /* 模塊名|函數名|類名 */  int co_firstlineno;   /* 代碼塊在文件中的起始行號 */  PyObject *co_lnotab;  /* 字節碼指令和行號的對應關系 */  void *co_zombieframe;  /* for optimization only (see frameobject.c) */} PyCodeObject; typedef struct {  PyObject_HEAD  int co_argcount;    /* 位置參數個數 */  int co_nlocals;     /* 局部變量個數 */  int co_stacksize;    /* 棧大小 */  int co_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;   /* 模塊名|函數名|類名 */  int co_firstlineno;   /* 代碼塊在文件中的起始行號 */  PyObject *co_lnotab;  /* 字節碼指令和行號的對應關系 */  void *co_zombieframe;  /* for optimization only (see frameobject.c) */} PyCodeObject; 

5. pyc文件格式

加載模塊時,模塊對應的PyCodeObject對象被寫入.pyc文件,格式如下:

2015411111617086.png (377×480)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潼关县| 汾阳市| 洞口县| 垫江县| 邳州市| 海原县| 仲巴县| 绥阳县| 富阳市| 尖扎县| 新疆| 沽源县| 浮山县| 丹寨县| 贞丰县| 金阳县| 无棣县| 高尔夫| 蒙山县| 吕梁市| 石城县| 荃湾区| 鹰潭市| 神木县| 栾城县| 宜阳县| 镇雄县| 平安县| 四子王旗| 大方县| 宜昌市| 威信县| 济南市| 盘锦市| 华宁县| 扶风县| 临漳县| 百色市| 田林县| 旬邑县| 商南县|