Python是如何运行的?
像绝大多数编程语言一样,要在计算机上能够运行python程序,至少需要安装一个最小的Python包:一个Python解释器和支持的库。
安装Python
安装包下载:http://www.python.org/
根据不同的平台,选择不同的安装包。Windows平台可通过获取并运行自安装的可执行文件,把Python安装到机器上,一般情况是双击后再所有的弹出的对话提示框选择“是”或“继续”即可;Linux平台都预装有Python以及相关标准库。
Python如何运行程序
当我们编写好python代码并保存.py文件后,在命令行模式下用python命令运行python代码,python解释器会执行一些我们看不到的步骤,确切的说第一步是编译成所谓的“字节码”,第二步将其转发到所谓的虚拟机PVM,第三步是虚拟机PVM将我们的程序转为计算机可执行的二进制代码。
字节码编译
当程序执行时,Python内部(绝大多数是完全隐藏的)会现将源代码(.py)编译成字节码的形式。编译时一个简单的翻译步骤,而且字节码是源代码底层的、与平台无关的表现形式。通俗的讲是Python通过把每一条源语句分解为单一步骤来将这些源语句翻译成一组字节码指令。这些字节码可以提高执行速度,比起文本文件中的原始代码语句,字节码的运行速度要快得多。Python字节码不是机器上的二进制码,字节码是特定于Python的一种表现形式。
Python编译字节码的过程是完全隐藏起来的,如果Python进程在机器上拥有写入权限,它将把程序的字节码保存为一个以.pyc为扩展名的文件(“.pyc”就是编译过的“.py”源代码)。当程序运行之后,会在源代码的同一目录下看到这些文件。如果在上一次保存字节码之后没有修改源代码的话,Python将会加载.pyc文件并跳过编译步骤。当源代码修改后,它自动检查源文件和字节码文件的时间戳,字节码将会自动重新创建并覆盖之前的.pyc字节码文件。需要注意的是如果Python不拥有写入权限的话,并不会影响程序的工作。python仍然会有字节码的编译过程,字节码将会在内存中生成并在程序结束时释放。由于字节码.pyc能够加速启动程序,建议给python有写入权限。
Python虚拟机(PVM)
当字节码编译之后,将会把字节码发送到Python虚拟机(Python Virtual Machine,简写为PVM)上执行。实际上,PVM就是迭代运行字节码指令的一个大循环,一个接一个地完成操作。PVM是Python的运行引擎,是Python系统的一部分,是实际运行脚本的组件。
Python性能
python是代码写好后立即运行的,不需要像C/C++那样build和make等步骤,在开发上效率得到极大的提高,开发和执行环境实际上是没有区别的。Python代码无法运行像C/C++代码一样快的原因:PVM循环仍然需要解释字节码,并且字节码指令与CPU指令相比需要更多的工作,与其他的解释器不同,Python并不需要反复重分析和重分解每一行语句,实际上Python代码的运行速度介于传统的编译语言和传统的解释语言之间。
Python的主要实现方式
python语言主要有三种表现方式:CPython、Jython和IronPython。
CPython:和其他两种实现方式相比,原始的、标准的Python实现方式称作为CPython。计算机上一般预安装的为CPython。
Jython:是python语言的替代实现方式,其目的是为了与Java编程语言集成,能够让Python代码脚本化java应用程序。Jython包含了Java类,这些类编译Python源代码、形成Java字节码,并将得到的字节码映射到Java虚拟机(JVM)上。
IronPython:其设计目的是让Python程序可以与Windows平台上的.NET框架以及与之对应的Linux上的Mono编写成应用程序相集成。像微软早期的COM模型一样,将.NET和C#程序语言的运行系统设计成与语言无关性的对象通信层。IronPython允许Python程序既可以用作客户端也可以用作服务端的组件,还可以与其他.NET和C#的语言进行通信。
Python程序的运行
在安装完Python包之后,有多种办法可以运行Python:在IDE中、系统终端中等。Python解释器成功安装在计算机上后,往往在操作系统提示环境下驶入python,不需要任何参数。如Windows的cmd下运行:
Linux下运行:
交互地运行代码
在交互模式下,想输入输入多少Python命令就输入多少,每一个命令在输入完之后回车即可立即运行。此外,交互模式下自动打印表达式结果,往往可以不需要每次都输入print语句;也可以在交互模式输入多行语句(if、while、for等复合语句),在输入完所有语句后按两次Enter后会立即运行。
交互模式是python实验绝佳的好地方。当我们对一段Python代码的运行有任何疑问的时候,马上可以打开交互命令行并实验代码,可以看到发生了什么。
可执行脚本(#!)
如果在Linux及其他的Unix类系统上使用Python,可以将Python代码编程为可执行程序,就像使用Shell语言编写的csh和ksh一样。这样的脚本往往叫做可执行脚本。简而言之,Unix风格的可执行脚本包含了Python语句的一般文本文件,但是有两个特殊的属性。
- 它们的第一行是特定的。脚本的第一行往往以字符#!开始(通常叫做“hash bang”),其后紧跟机器python解释器的路径
- 它们往往都拥有可执行的权限。脚本文件往往通过告诉操作系统它们可以作为顶层的程序执行,而拥有可执行的权限。
例如在shell上vim test.py,保存文件之后,确保改文件有执行权限后,在shell上可以./test.py直接运行代码。
在Window平台必须在命令行模式下输入test.py或python test.py运行