1、Python程序执行过程
与java类似,Python将.py编译为字节码,然后通过虚拟机执行。编译过程与虚拟机执行过程均在python25.dll中。Python虚拟机比java更抽象,离底层更远。编译过程不仅生成字节码,还要包含常量、变量、占用栈的空间等,Pyton中编译过程生成code对象PyCodeObject。将PyCodeObject写入二进制文件,即.pyc。
有必要则写入A.pyc指的是该.py是否只运行一次,如果import的模块,肯定会生成.pyc。
2、PyCodeObject对象与.pyc文件
Python解释器将.py程序编译为PyCodeObject对象,具体过程与编译原理类似。
typedef struct {
PyObject_HEAD
int co_argcount; // Code Block的参数的个数,比如说一个函数的参数
int co_nlocals; // Code Block中局部变量的个数
int co_stacksize; // 执行该段Code Block需要的栈空间
int co_flags; // N/A
PyObject *co_code; // Code Block编译所得的byte code,以PyStringObject的形式存在
PyObject *co_consts; // PyTupleObject对象