国产探花免费观看_亚洲丰满少妇自慰呻吟_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)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 化隆| 桂林市| 和林格尔县| 盐亭县| 五华县| 临清市| 陵川县| 井冈山市| 灵山县| 玛沁县| 镇赉县| 新建县| 隆德县| 宁国市| 阿拉尔市| 霍林郭勒市| 盖州市| 弥勒县| 土默特右旗| 施秉县| 大洼县| 南阳市| 阆中市| 板桥市| 塘沽区| 凤山市| 新晃| 高碑店市| 盐城市| 灌云县| 德惠市| 镇赉县| 武定县| 阳春市| 大庆市| 潮州市| 江油市| 柳江县| 肥城市| 项城市| 宜都市|