在计算机语言中Python源代码一般的情况下是不进行编译的,只是通过几个文件就能运用的,以下的文章主要是通过Python源代码的相关代码来具体描述Python源代码的编译是如何进行的。
我们一般使用这样的命令运行一个python程序:
- C:\> python im.py
其中,im.py文件的内容是:
- #!/usr/bin/env python
- import mymodule
- mymodule.say(”hello”)
执行这一命令后,Python解释器其实并不一定会读入mymodule.py文件,它会尝试读取mymodule.pyc文件或者mymodule.pyo文件。如果都失败了,或者mymodule.py文件比mymodule.pyc/mymodule.pyo新,才转而读入mymodule.py文件。
Python只懂得解释执行字节码,所以mymodule.py文件读入后***件事就是先进行编译。编译的结果会被尝试保存到mymodule.pyc文件中。等一下会讨论如何控制Python的编译过程。
虽然与C++/Java这样的静态语言一样,采用了编译(compile)这个术语,实际情况还是有所不同的。首先,最明显的一点,Python源代码编译的最终结果不是机器码,而是字节码。Python的编译实际上主要是进行文法分析,生成一个抽象语法树,然后转储成字节码形式了事。#t#
从上面的介绍可以发现Python的编译与C++相去甚远。不过倒与Java有些相像,因为它们都生成字节码。凭良心说,Java的编译过程比Python先进很多。Java的解释器在执行Java字节码的时候,会使用JIT,将循环操作等热点转化成为机器码。所以有时候Java的性能能够达到接近C++的级别。
Python缺少JIT并非故意所为,而是缺少人力资源。现在已经有一个pysco的外部模块,据说能大大提高Python代码的速度,不过这个模块还没有进入Python的官方代码。
以上的文章就是对Python源代码的编译的实际操作步骤的部分介绍。