1.解释型语言和编译型语言计算机无法识别高级语言,所以当我们运行高级语言程序时,需要一个“翻译器”将高级语言转换成计算机可以理解的机器语言(二进制)的过程,这个过程分为两类,第一类是编译,第二类是解释。在编译语言执行之前,编译器对程序进行编译处理,将程序转换为机器语言。运行时不需要翻译,直接执行即可。最典型的例子就是C语言。解释型语言没有这个编译过程。而是在程序运行时,解释器逐行解释程序,然后直接运行。最典型的是Ruby和Python。通过上面的例子,我们可以总结出解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序进行了“翻译”,所以“翻译”在运行过程中就丢失了,所以效率是比较高。但我们不能一概而论。一些解释型语言通过解释器的优化,在翻译程序的时候也可以优化整个程序,从而在效率上超越编译型语言。另外,随着Java等基于虚拟机的语言的兴起,我们不能单纯地将语言分为解释型语言和编译型语言。以Java为例,Java是先被编译器编译成字节码文件(不是二进制文件),然后在运行时被解释器解释成机器文件,所以我们说Java是先编译后编译的语言然后解释。2.什么是Python?其实Python和Java、C#一样,也是一种基于虚拟机的语言,一种先编译后解释的语言。当我们在命令行输入pythonhello.py的时候,其实是激活了Python解释器,告诉解释器你要开始工作了,但是在解释之前,第一个执行的工作和java一样,就是编译。熟悉Java的同学可以想一想我们是如何在命令行中执行一个Java程序的:javachello。只是拷贝而已,其实Python也是一样的。3.简述Python的运行过程说这个问题之前先说两个概念,PyCodeObject和pyc文件我们在硬盘上看到的pyc就不用多说了,其实PyCodeObject就是实际上是由Python编译器编译的。的结果,我们先简单了解一下。Python程序运行时,编译结果保存在内存中的PyCodeObject中。当Python程序完成运行时,Python解释器将PyCodeObject保存在pyc文件中。第二次执行python程序时,程序会先从硬盘中运行pyc文件,找到则直接加载,否则重复上述过程。总结:Python是编译+解释型语言。执行时,由Python解释器逐行编译解释,然后运行。因为在运行的过程中,需要编译解释,所以Python的运行性能会比编译型低,例如C++。Python解释器为了提高性能,会把模块的编译解释结果保存在pyc文件中,这样下次执行的时候省去编译过程,提高性能。
