浅谈python编译过程

python是一门解释性语言

什么是解释性语言?学过C语言的同学都知道C语言是一门编译性语言,那么这里我们就要清楚的了解解释性语言编译性语言有什么区别。

编译性语言:
只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前编译的结果即可;因此其执行效率比较高。例如:C语言、C++等

解释性语言:
源代码不能直接被编译为机器语言,而是先编译成中间代码,再由解释器对中间代码进行解释运行;执行效率较慢。例如:python、JS等

这也就是为什么人们常说C语言底层语言(距离内核近),python是高级语言(距离内核远)

python运行效率慢是python最大的缺点,当然目前在实际项目中会有很多优化的方案,可以提升python的效率。这个后期咱们再谈。

python的运行过程

根据解释性语言的性质,系统在读取python代码时,往往是如下步骤:

编译
m.py
m.pyc
PVM运行

m.py(源代码)——> m.pyc(字节码)——> PVM(虚拟机运行)

当python运行时,会将源代码翻译为字节码,之后将字节码转发至虚拟机中即可运行。

而其中的字节码在内存中的PyCodeObject中,运行结束后,python将PyCodeObject写入到.pyc文件中(python2中是.pyc,python3 是_pycache__的子目录中),.pyc文件其实是PyCodeObject的一种持久化保存方式(通常与源代码在统一目录下).

.pyc文件会提高代码的执行速度。
下一次运行源代码时,系统会识别源代码和.pyc文件的最后修改时间是否相同,相同即可直接运行字节码;不相同则废弃原字节码,重新由源代码编译为新的字节码

你可能感兴趣的:(python基础)