注意:本文所有场景仅适用于CPython,对于pypy、Jython等不一定适用。
一:Python程序是如何执行的呢?
首先,我们来看看平时Python代码是怎么运行的
第一步:通过Python编译器将源程序(.py)编译成PyCodeObject
编译包含以下几步:
1.将源代码 parsing 成一个 parse tree。
2.将 parse tree 转化为 AST(抽象语法树, abstract syntax tree)。
3.生成符号表(symbol table)。
4.从 AST 生成 code object
第二步:通过虚拟机对字节码进行解析执行
所以,一般Python解释器由编译器与解析器两部分组成
网上很多帖子将第一步的编译理解为生成pyc格式的文件,这个是错误的,一般Python解释器只是将PycodeObject缓存为pyc文件,用以增加重复执行的速度,并非编译的过程中一定会生成pyc文件,比如下面的例子
./test