初识Python的编译和执行
在最近开始被迫了解Python之前,已经很多年没有学习一门全新的语言(年纪大加上实在是太忙,好吧。。。我承认是我懒)。结果就是,各种不适应,各种记不住。无奈,只好把10多年前的上学做笔记的老套路再拿出来。
第一课,先写一点基础问题:
1. Python是编译型语言还是解释型语言?
就是说Python是编译执行,还是解释执行。计算机语言的执行过程历来有两种:
1.编译执行
源代码经过编译器编译处理,生成目标机器码,就是机器能直接运行的二进制代码,下次运行时无需重新编译,CPU可以直接处理。例子,C、C++语言。
优点:执行速度快。
缺点:不具备可移植性。编译往往是针对特定CPU体系的,这些目标代码只能在特定平台执行,如果这个程序需要在另外一种 CPU 上面运行,这个代码就必须重新编译。2.解释执行
在运行期间,源代码被特定的解释器,逐行翻译成目标机器码。每次执行时,都需要逐行解释。例子:JavsScript。
优点:可移植性好。因为解释器的存在,源代码往往独立于硬件和OS平台。而且,由于不需要考虑底层的一些问题,相对于编程人员来说难度降低,效率也会有所提升。
缺点:由于增加了解释过程,执行速度会受一定影响。结论
我们可以简单认为 Java、Python 都是“解释类型”的语言。
但是(敲黑板!), Python并不是严格的解释型语言,因为 Python 代码每次运行都要进行转换成字节码(中间码),然后再有虚拟机(VM)把字节码转换成机器语言,最后才能在硬件上运行。正是由于可以中间代码和VM的存在,Python(Java也一样)才被说成不是严格意义上的解释语言,或者叫“解释类型”。每个 .py 文件将被换转成 .pyc 文件,.pyc 就是一种字节码文件,它是与平台无关的中间代码,不管你放在 Windows 还是 Linux 平台都可以执行,运行时将由虚拟机逐行把字节码翻译成目标代码。
当然,Python可以通过工具打包成可执行文件,但这个已经不是与语言本身的特性了。
2. Python执行过程解析?
Python源码被编译成的中间码(字节码),其实是模仿的x86的汇编,然后将代码编译成一条一条的指令交给一个虚拟的CPU去执行。详细过程有大神已经说明的很详细了,这里转载供参考了。