python是什么类型的语言、为什么-python是解释型语言,为啥还要编译?

关于这个问题,谈谈我的个人看法。python是解释型语言,python官方tutor里面的介绍,说的也是 its interpreted nature, and python interpreter,翻译过来是python解释执行的本质和python解释器。这里面都没有提到编译。

但是,python有编译,它有py_compile和compileall标准模块,还有builtin的compile函数。为什么一个解释型的编程语言,还有编译呢?(编译python文件)

问题回到了我们应该如何去理解解释型的语言?

应该这样说,一个编程语言是不是解释型的,跟是否要编译没有关系。而且,编译这个概念也要扩展一下,C语言的编译,其实是编译链接,最后得到的是一个只有机器码的文件;而python的编译,就是编译为python byte code,与任何CPU无关,只有python解释器能看懂的字节码。

所谓解释型语言的判定,应该是其是否可以一行一行地一遍翻译(或编译)一遍执行!python解释器本质上就是一行行执行代码,比如你在使用交互式的python解释器的时候。而C语言,显然不能一行一行地执行,因此它是编译型的编程语言。

有python经验的同学,可能都遇到过这样的情况。有一些python代码中的bug,一定要运行到那段代码的时候,才能被解释器抛出来。典型的异常就是NameError,一个函数中使用了一个变量,但是此变量不存在。python的编译过程是不能发现这类bug的,只有函数在被调用执行的时候,直到执行到那一行包含不存在变量的代码时,NameError才会被抛出来。而C就不一样,所有的变量都要事先申明,编译过程会发现所有未申明的变量。

python代码会被编异常byte code,然后在解释中一行行地执行byte code。byte code至于python解释器有关,python解释器相当于一台虚拟机,有自己的"机器码”!C语言编译之后,可直接在CPU上运行(当然需要OS的调度),而CPU本质上也是一行行地执行它的机器码,CPU就是一个机器码解释器。但python的byte code不会被编译成本地CPU的机器码(至少python解释器自己不会干,有第三方库可以干这个事情)。所以,是否会被编译成本地CPU的机器码,可能也是一个解释型语言和编译型语言的区别角度。

还有python的动态类型,和一切皆为对象。这些特性我认为都与其本质上是解释型的语言有关系。解释,一行行地将高级逻辑表达翻译成可以被执行的代码!编译,将代码翻译成CPU机器码!Shell脚本就是在做解释执行,其执行就是在解释后调用不同的程序来完成对应的动作,这个过程没有编译成CPU机器码的部分,其调用的子程序,都是已经编译好了的。

-- EOF --

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值