参考借鉴了一些网络上的文章,大概搞清楚python的执行过程。
python是解释型还是编译型
Python和Java/C#一样,也是一门基于虚拟机的语言,先来从表面上简单地了解一下Python程序的运行过程。
在命令行中输入python hello.py
时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
在命令行中如何执行一个Java的程序:
javac hello.java
java hello
在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当执行python hello.py
时,他也一样执行了这么一个过程,所以应该这样来描述Python,Python是一门先编译后解释的语言。
简述Python的运行过程
先来说两个概念,PyCodeObject和pyc文件。
PyCodeObject则是Python编译器真正编译成的结果。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject
中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
故,pyc文件其实是PyCodeObject对象的一种持久化保存方式。
pyc的目的是重用
总结
源代码在编译器编译成字节码(PyCodeObject)放在内存中,PVM解释执行字节码。
第二次运行,直接读取字节码,PVM解释执行字节码,省去了编译的时间。