Python程序的运行过程(小白必看)
机器语言编写的程序可以在计算机中直接运行,而汇编语言和高级语言编写的程序(通常称为源程序)则需要“翻译”成机器语言才能运行。
源程序“翻译”的方式可分为解释方式和编译方式两种:
Python 是一种解释型的语言,但是这种说法是不严谨的,实际上,Python 在执行时,首先会将 .py 文件中的源代码编译成 Python 的字节码,然后再由 PVM(Python Virtual Machine,Python虚拟机)来执行这些编译好的字节码。这种机制的基本思想跟 Java、.NET 是一致的。
然而,PVM 与 Java 或 .NET 的 Virtual Machine 不同的是,PVM 是一种更高级的 Virtual Machine。这里的高级并不是通常意义上的高级,不是说 PVM 比 Java 或 .NET 的功能更强大,而是说和 Java 或 .NET 相比,PVM 距离真实机器的距离更远。或者可以这么说,PVM 是一种抽象层次更高的 Virtual Machine。
从计算机的角度看,Python 程序的运行过程包含两个步骤:解释器解释和虚拟机运行,如下图所示。
图 1 Python程序运行过程
可将 Python 命令编写到一个源代码文件中,通过执行源代码文件运行程序。Python 程序源代码文件扩展名通常为 .py。在执行时,首先由 Python 解释器将 .py 文件中的源代码翻译成字节码(类似于 Java 的字节码和 .NET 的中间代码),再由 PVM 逐条将字节码翻译成机器指令执行。Python 程序的这种机制和 Java、.NET 类似。
Python 还可以通过交互方式运行。例如,在 UNIX/Linux、Mac、Window 等系统的命令模式下运行 Python 交互环境,然后输入 Python 指令直接运行。
实际开发中,Python 常被称为胶水语言,这不是说它会把你的手指粘住,而是说 Python 能够很轻松地把用其他语言制作的各种模块(尤其是 C/C++)轻松地联结在一起。常见的一种应用情形是,使用 Python 快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如 3D 游戏中的图形渲染模块,速度要求非常高,就可以用 C++ 重写。
源程序“翻译”的方式可分为解释方式和编译方式两种:
- 解释方式:源程序进入计算机时,翻译程序逐条翻译程序指令,每翻译一条指令便立即执行。特点:运行时逐语句解释执行,例如:JavaScript。优点:可以跨平台,开发效率高。缺点:运行效率低。
- 编译方式:源程序输入计算机后,翻译程序首先将整个程序翻译成用机器语言表示的目标程序,然后计算机再执行该目标程序,获得计算结果。特点:运行时,计算机可以直接执行。例如:C语言。优势:运行速度快。缺点:不能跨平台,开发效率低。
Python 是一种解释型的语言,但是这种说法是不严谨的,实际上,Python 在执行时,首先会将 .py 文件中的源代码编译成 Python 的字节码,然后再由 PVM(Python Virtual Machine,Python虚拟机)来执行这些编译好的字节码。这种机制的基本思想跟 Java、.NET 是一致的。
然而,PVM 与 Java 或 .NET 的 Virtual Machine 不同的是,PVM 是一种更高级的 Virtual Machine。这里的高级并不是通常意义上的高级,不是说 PVM 比 Java 或 .NET 的功能更强大,而是说和 Java 或 .NET 相比,PVM 距离真实机器的距离更远。或者可以这么说,PVM 是一种抽象层次更高的 Virtual Machine。
从计算机的角度看,Python 程序的运行过程包含两个步骤:解释器解释和虚拟机运行,如下图所示。
图 1 Python程序运行过程
可将 Python 命令编写到一个源代码文件中,通过执行源代码文件运行程序。Python 程序源代码文件扩展名通常为 .py。在执行时,首先由 Python 解释器将 .py 文件中的源代码翻译成字节码(类似于 Java 的字节码和 .NET 的中间代码),再由 PVM 逐条将字节码翻译成机器指令执行。Python 程序的这种机制和 Java、.NET 类似。
Python 还可以通过交互方式运行。例如,在 UNIX/Linux、Mac、Window 等系统的命令模式下运行 Python 交互环境,然后输入 Python 指令直接运行。
实际开发中,Python 常被称为胶水语言,这不是说它会把你的手指粘住,而是说 Python 能够很轻松地把用其他语言制作的各种模块(尤其是 C/C++)轻松地联结在一起。常见的一种应用情形是,使用 Python 快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如 3D 游戏中的图形渲染模块,速度要求非常高,就可以用 C++ 重写。