Python编译器是什么解释器和编译器的区别是什么?

你的位置: >
> 编译器与解释器的区别和工作原理
这篇教程,我们一起来了解编译器和解释器的工作原理,这对我们提升能力很重要。
我一直认为概念或理论知识是非常重要的,让我们能够将很多模糊的认知关联起来,变得更加清楚,从而打开视野,上升到新的层次。
但是,一般来说,在刚刚入门的时候,接触一些概念性、理论性的内容,不但非常枯燥,而且难以理解。
而在一定时间的学习接触之后,再来看这些东西,则会变得更加容易领悟,理解的更透彻。
这篇教程会包含很多专业术语,我会对其中一些专业术语进行解释,对于一些未做解释的专业术语,建议大家通过搜索引擎进行理解。
首先,从Python这种编程语言说起。
它有以下几个特点:
面向对象:在本站的《Python3萌新入门笔记》中有专门的文章,简单来说是指在程序设计中能够采用封装、继承、多态的设计方法。
动态语言:是在运行时可以改变其结构的语言;例如,在程序运行过程中,给一个类的对象添加原本不存在的属性。
动态数据类型:变量不需要指定类型,但需要解释器执行代码时去辨别数据类型;这个特点让编程变得简单,但代码执行效率变低。
高级语言:是指高度封装了的编程语言,相对于机器语言,更加适合人类编写与阅读。
解释型语言:是指无需编译,直接能够将源代码解释为机器语言进行运行的语言。
从最后一个特点,我们能够看到Python是解释型语言,也就是说源代码需要通过解释器进行解释执行。
编程语言分为编译型语言和解释型语言,我们需要了解它们的区别,才能够更好的理解编译器和解释器的区别。
相信大家都知道C和C++。
这两种语言都是编译型语言。
编译型语言的特点是执行速度快,缺点是什么呢?
编译型语言需要编译器处理,主要工作流程如下:
源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)
在这个工作流程中,编译器调用预处理器进行相关处理,将源代码进行优化转换(包括清除注释、宏定义、包含文件和条件编译),然后,通过将经过预处理的源代码编译成目标代码(二进制机器语言),再通过调用链接器外加库文件(例如操作系统提供的API),从而形成可执行程序,让机器能够执行。
在这个工作流程中,目标代码要和机器的CPU架构相匹配,库文件要和操作系统相匹配。
如果想在不同CPU的机器或者系统上运行C语言的源代码,就需要针对不同的CPU架构和操作系统进行编译,这样才能够在机器上运行程序。
所以,编译型语言的缺点我们就看到了,它不适合跨平台。
而且,到这里大家应该能知道,为什么CPU一样,但是exe程序只能Windows中运行,而不能在Mac中运行了。
如果上面感觉不太好理解,我举一个贴近生活的例子:
一名会多国语言的老师教了很多外国学生,这些学生分别来自有英国、美国、法国、德国、韩国。
当这名老师给这些学生发放学习资料的时候,都需要把中文资料先进行翻译,变成英文版、德文版、法文版和韩文版的电子文档,再分别发给每个国家的学生去学习。
这个翻译的工作非常繁琐。
不仅,要翻译成每个国家的语言,而且,还要考虑英式英语和美式英语的区别分别翻译成不同的英文版。
再有,就是每次资料更新还都要重新翻译一遍。
在上面的例子中,中国老师就像是编译型语言的开发人员,中文资料就是编译型语言的源代码,翻译后的资料就是不同CPU架构的机器语言,不同语言的学生就是不同CPU架构的机器,美国和英国的学生,就是CPU架构相同但操作系统不同的机器。
注意:这里涉及到跨平台的概念,平台可以理解为不同CPU架构(例如X86、ARM等)的机器和同种CPU但不同的操作系统(例如Unix、Windows等)的机器。
提示:建议大家阅读上述内容时,了解一下预处理器、链接器、库文件(静态链接库和动态链接库)的相关概念。
我们继续看刚才的例子。
这位累得要死的中国老师,开始想办法。
他想,我干嘛自己去翻译,给他们一人一个自动翻译软件不就好了?
于是,老师就给每个学生定制了一个自动翻译软件,这个软件能够一页一页的原始中文资料翻译成不同的语言资料给学生看。
现在的情况,这名老师工作会轻松很多,不需要再考虑制作各种语言版本的资料,只需要把精力放在制作中文资料就好了。
早期的解释器就是这样的工作流程:源代码 (source code) → 解释器 (interpreter) 。
源代码无需预先编译成可执行程序。
在程序执行时,解释器读取一句源代码之后,先进行词法分析和语法分析,再将源代码转换为解释器能够执行的中间代码(字节码),最后,由解释器将中间代码解释为可执行的机器指令。
所以,编译型语言的可执行程序产生的是直接执行机器指令,而解释型语言的每一句源代码都要经过解释器解释为可以执行的机器指令,相比之下解释型语言的执行效率会低一些。
但是,解释型语言在不同的平台有不同的解释器,源代码跨平台的目的实现了,开发人员不用再考虑每个平台如何去编译,只需要关注代码的编写,编写完的代码在任何平台都能无需修改(或少量修改)就能正确执行。
例如,Linux系统中执行Python源代码时支持 fork()函数,而window系统中不支持这个函数,如果将运行在Linux系统中的源代码移植到Windows系统,这时就需要进行修改。
理解了编译型语言和解释型语言的区别,我们继续看例子。
老师虽然给学生定制了翻译软件,但是发现这个软件翻译每页内容都很慢,究其原因,这个软件需要先把每页内容分析一遍,将内涵复杂的中文(例如成语)转换成简单直接能够直接进行翻译的中文,再进行向其它国家语言的翻译。
看到这个问题之后,软件的提供商想出了一个解决方案。
这个方案就是:第一次打开资料时,让翻译软件把原始资料完整的进行分析转换,保存成一个能够直接翻译的中间文件;然后,翻译程序再一页一页的读取转换后的中间文件去翻译;这样的话,虽然第一次打开时慢了些,但是,当学生再次打开资料时,只要原始资料没有更新,就直接通过保存的中间文件进行翻译,速度会有很大提升。当然,程序打开时,需要对比一下原始资料是否和中间文件一致,如果有修改,则再次编译出新的中间文件,覆盖旧的中间文件。
Python程序运行时,就像上面的例子一样,先将源代码完整的进行转换,编译成更有效率的字节码,保存成后缀为“.pyc”的字节码文件,然后,翻译器再通过这个文件一句一句的翻译为机器语言去执行。
注意:Shell中执行源代码时不会生成中间文件,每次都是读取源代码,转化为字节码后,解释执行。
上面的例子还没结束。
软件供应商提出的方案虽然解决了一些效率问题,但是还无法完全让人满意。
经过苦思冥想,软件供应商又想出了一个新的方案。
在原始资料中有很多重复的内容;
这些重复的内容如果翻译一次之后,就把它保存,再碰到相同的内容就直接使用保存的翻译结果。
而没有必要每次都再翻译。
长时间运行程序时,速度就会快上很多。
这个例子实际上就是JIT即时编译器(Just-In-Time Compiler)的比喻。
无论是使用解释器进行解释执行,还是使用编译器进行编译后执行,最终源代码都需要被转换为对应平台的本地机器指令。
那么,一些重复出现的代码,就可以将其编译为本地机器指令,重复使用,从而提高效率。
这些重复出现的代码包括多次调用的方法和多次执行的循环体。
JIT即时编译器比较典型的例子是在JVM(Java虚拟机)中。
Java程序最初是通过解释器进行解释执行的,当Java虚拟机发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。JIT即时编译器会将这些“热点代码”编译成与本地机器相关的机器指令,进行各个层次的优化。
当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地机器指令之后,可以获取更高的执行效率。当程序运行环境中内存资源限制较大,可以使用解释器执行节约内存,反之可以使用编译执行来提升效率。
大家都知道,Java程序的运行性能很高,基本上可以和C/C++的程序相媲美。这主要是因为JIT即时编译器可以针对那些频繁被调用的“热点代码”做出深度优化,而静态编译器无法完全推断出哪些是运行时的热点代码,而不能做出针对性的优化。因此,通过JIT即时编译器编译的本地机器指令才会比直接生成的本地机器指令拥有更高的执行效率。
Python有多种解释器,比较著名的有CPython、IPython、PyPy、Jython和IronPython等。
其中CPython是Python官方默认的解释器,它是用C语言实现Pyhon解释器。
CPython是单纯的解释器,将源代码转化为字节码之后解释执行。
而另外一款使用Python实现的Python解释器PyPy,比CPython解释器更加灵活。因为PyPy采用了JIT技术,在程序的运行性能上PyPy将近是CPython解释器执行效率的1至5倍。
而其它的解释器都各有特点。
IPython是基于CPython增强了交互。
Jython是运行在Java平台上的Python解释器。
IronPython是运行在.Net平台上的Python解释器。
以上就是对编译器和解释器区别和工作原理的讲述,因为没有找到现成的资料,所以,其中内容参考了很多网上的资料,多番查证后,进行了融合。如果有解释错误,或者讲解不透彻的地方,欢迎大家指正并提出建议。
转载请注明: &
与本文相关的文章第三方登录:找不到答案?
CPython是什么?PyPy是什么?Python和这两个东西有什么关系
CPython是什么?PyPy是什么?Python和这两个东西有什么关系
按投票排序
按时间排序
<dd id="vote_num_
CPython:是用C语言实现Pyhon,是目前应用最广泛的解释器。最新的语言特性都是在这个上面先实现,基本包含了所有第三方库支持,但是CPython有几个缺陷,一是全局锁使Python在多线程效能上表现不佳,二是CPython无法支持JIT(即时编译),导致其执行速度不及Java和Javascipt等语言。于是出现了Pypy。
Pypy:是用Python自身实现的解释器。针对CPython的缺点进行了各方面的改良,性能得到很大的提升。最重要的一点就是Pypy集成了JIT。但是,Pypy无法支持官方的C/Python API,导致无法使用例如Numpy,Scipy等重要的第三方库。这也是现在Pypy没有被广泛使用的原因吧。
而PyPy与CPython的不同在于,别的一些python实现如CPython是使用解释执行的方式,这样的实现方式在性能上是很凄惨的。而PyPy使用了JIT(即时编译)技术,在性能上得到了提升。
Python的解释器:
1、由于Python是动态编译的语言,和C/C++、Java或者Kotlin等静态语言不同,它是在运行时一句一句代码地边编译边执行的,而Java是提前将高级语言编译成了JVM字节码,运行时直接通过JVM和机器打交道,所以进行密集计算时运行速度远高于动态编译语言。
2、PyPy,它使用了JIT(即时编译)技术,混合了动态编译和静态编译的特性,仍然是一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。绝大部分 Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的。
<dd id="vote_num_
python是一种编程语言。但这种语言有多种实现,而且与其他语言不同,python并没有一个专门的机构负责实现,而是由多个社区来实现。其中使用c语言开发的叫做python,在于别的语言开发的python对比时为避免歧义通常称为CPython。同样的,使用java开发的叫做JPython,使用.net开发的叫做IronPython。
而PyPy与CPython的不同在于,别的一些python实现如CPython是使用解释执行的方式,这样的实现方式在性能上是很凄惨的。而PyPy使用了JIT(即时编译)技术,在性能上得到了提升。
登录后可回答问题,请
一种稳定、可靠、容量和服务能力可弹性伸缩的分布式关系型数据库服务。
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...Python IDLE 以及编译器解释器的概念梳理 Python中IDLE是其自带的集成开发工具(IDE:同时拥有编辑、编译、调试、运行等多种功能的集成工具),并且它也是python自带的编译器和解释器。
*python的IDLE命名之所以不叫IDE,据说是根据python创始人Guido Van Rossum喜欢的Monty Python戏剧团的成员名字(Eric Idle艾瑞克.艾多)而来.
*Monty Python 是英国的一个6人组合喜剧团体,曾在十九世纪70~80年代借助他们的电视、影视剧红极一时,python创始人Guido Van Rossum是其影视剧忠实粉丝,于是,Guido Van Rossum 贵泽-范-罗萨姆在90年代创作Python 编程语言时多处借用了Monty Python团体及其成员名。下边简单梳理下python程序从编辑到执行的过程以及编译器和解释器的概念:一,
python程序从编辑到执行的过程(总是先编译后解释的机制)首先,我们通过文本编辑器或用自带的IDLE编辑器创建.py文件,并在其中编写python程序,编辑程序完成并调试无误后保存。然后,通过在IDLE中执行Run Module(或快捷键F5)运行程序,运行的过程本质是IDLE先调用自身的编译功能转换该程序为二进制形式的‘’中间编码‘’,并整理为PyCodeObject对象形式暂时保存在内存中,然后由解释器逐行解释得到最终结果,接下来就会出现python编辑解释机制聪明的地方:(它会针对不同程序类型对python程序执行不同后续操作)第1种情况,当解释器显示出运行结果后,发现当前python程序是一次性的脚本文件,且未包含导入模块的形式,即当前程序没有可重用性,它便不会保存解释后的所得结果到.pyc文件,也就不会出现.pyc文件(.pyc文件被称为字节码文件,是程序先编译后解释结果的编码,是二进制文本)。第2种情况,当解释器处理得到结果,暂存于内存中,并发现该程序中有可重用的模块,即出现了import模块语句(高可重用性的脚本文件)且导入的模块非IDLE自带模块,解释器便聪明的将该程序保存到.pyc文件中,如此,下次再执行时,就不用再编译,节省了时间。**证实这一点可以编辑如下两个python 文件来验证:1,
prints.pydef printS(s):
print(‘return:%s’%s)
printstr.py
From prints import prints
printS(‘hello world’)
然后执行printstr.py文件,便会在同目录出现关于prints文件名的文件夹,其中有关于prints的.pyc文件。这就是解释器判断到执行程序中导入了可重用性模块,便将其先编译后解释的结果保存在.pyc文件中,以备下次重复执行时使用,节约了再编译的时间成本。如果想要强制生成.pyc文件,可在msdos命令行使用命令:(例如源文件hello.py)python
#在源文件所在目录运行后即生成hello.pyc二,
python的编译器和解释器计算机不能直接理解机器语言(二进制语言)以外的其他语言,所以必须把编写的程序翻译为机器可执行的机器语言,才能被计算机识别并执行。实现某种编程语言的这个翻译功能的机制被称为编译。解释器,在python中解释器主要的功能实现有三点,第一,把编译得到的在内存中的pyCodeObject程序对象转告给计算机处理模块,告诉它先后处理顺序;第二,判断提交给处理器的已经编译过的pyCodeObject程序对象是否具有可重用性,若该对象有可重用性就将其保存到.pyc文件中,以便下次再用到时直接调用,不需再编译。第三,解释器将计算机处理器运算后的结果呈现出来或返回给被调用处。Python的解释器在不同环境下分为多种,常见的有5种:1,CPython当我们从Python官方网站下载并安装好Python后,就获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。启动IDLE就是启动CPython解释器。CPython是使用最广的Python解释器。2,IPythonIPython是基于CPython之上的一个交互式解释器, IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。CPython用&&&作为提示符,而IPython用In [序号]:作为提示符。3,PyPyPyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。4,JythonJython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。5,IronPythonIronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。 以上综合最近学习,梳理了下各个知识点及其之间的联系,虽然花时间去了解python的程序的运行机制对学习编程技术没有直接利好,但是我相信很多东西需要知其然且要知其所以然,这样才能更“懂“你所面对的这个编程语言的思想,对编程这件事会有一个长远和整体的认知,这样才能充分发挥编程语言的优势,创作出优秀的有灵魂的产品.
如何使用Python自带编辑器IDLE
iamlaosong文
下载python进行安装,默认自带此工具,启用:开始-&程序-&Python 2.*/3.*-& IDLE (Python GUI)
如此就打开了Python Shell,可以...
Python基础(一):python的解释器
和其他语言例如C,CPP,JAVA一般,Python也有其独特的解释器,只不过其解释器是交互式的即对当前行代码结尾并回车后马上对其做出相应的解释,通俗点来说就是你写一行,当光标跳到下一行时就会对你刚刚...
Python学习--1.5Python编译器和解释器
当我们写好一个python的代码保存为.py文件时,点击运行程序,程序就可以出结果,这个过程需要Python解释器去实现。
Python的解释器很多,但使用最广泛的还是CPython、PyPy、J...
python解释器和编辑器
可以运行python的解释器和编译器很多,这里推荐两种:
它俩都可以进行编译和解释,在这里我个人比较喜欢使用jupyter。只需要配置环境:windows+r运行cmd...
python编译器IDLE的问题。
今天下午把python简明教程看了看,然后运行一个很简单的小程序,程序如下:
# Filename : var. py
入门Python自带编辑器IDLE
Python编辑器IDLE傻瓜入门:
下载python进行安装,默认自带此工具
开始-&程序-&Python 2.*/3.*-& IDLE (Python GUI)
如此就打开了Python...
Python IDLE入门
Python IDLE入门
一、IDLE的安装
当你安装python的时候,同时也安装了IDLE,python自带的一个编辑器,初学者可以利用它方便地创建、运行、测试Python程序。
你说你安...
编译器和解释器的区别与联系
菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。
  高手说:
  解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性...
常见的两种python编译器的安装
常用的python语言编译器有两种,一种是python本身自带的编译器,一种是anaconda编译器(包含了各种机器学习裤,极大方便了使用)。下面我分别介绍以下两个编译器安装方法。
python基础系列教程——Python的安装与测试:python解释器、PyDev编辑器、pycharm编译器
全栈工程师开发手册 (作者:陈玓玏)
python教程全解
白手起家,从头开启python的开发环境搭建。
如何安装Python
在https://www.py...
没有更多推荐了,可以运行python的解释器和编译器很多,这里推荐两种:
它俩都可以进行编译和解释,在这里我个人比较喜欢使用jupyter。只需要配置环境:windows+r运行cmd后输 pip install jupyter 然后等待安装完成,我这里的使用的python3。当然也可以使用PyCharm:
点击DOWNLOAD NOW。学习用的话安装Professional
运行jupyter
在窗口下输入jupyter notebook
windows下运行错误(ModuleNotFoundError: No module named ‘markupsafe._compat’)看来一篇博客找到了解决问题:
下载一个git:
打开git ,用 pip uninstall markupsafe将报错位置卸载,在重新安装( pip install markupsafe)在次尝试打开jupyter,问题解决(大家有别的位置错误的一可以尝试以下,解决后欢迎留言)
(jupyter会以网页的形式打开)
(在这里需要说明以下,在jupyter下运行的是Ipyter它是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。CPython用&&&作为提示符,而IPython用In [序号]:作为提示符。)
好用的解析器和编译器有很多,找到自己习惯的是最好的
常见的两种python编译器的安装
常用的python语言编译器有两种,一种是python本身自带的编译器,一种是anaconda编译器(包含了各种机器学习裤,极大方便了使用)。下面我分别介绍以下两个编译器安装方法。
推荐10 款最好用的 Python IDE
Python 非常易学,强大的编程语言。Python 包括高效高级的数据结构,提供简单且高效的面向对象编程。
Python 的学习过程少不了 IDE 或者代码编辑器,或者集成的开发编辑器(IDE)。...
python编辑器对比和推荐
RunningOn (挥着翅膀的男孩), 信区: Python
题: python IDE比较与推荐
我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出。有些我...
Python的编译器
Python有许多编译器,下面来介绍一些Python的编译器:1.AnacondaAnaconda是一个比较热门的编译器,它有很多种编译器,列如Jupyter等等下载网址2.pycharmpychar...
超赞!编译器和解释器的异同,瞬间明白了
转自:https://www.cnblogs.com/sword03/archive//1766147.html
菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。
...
如何使用Python自带编辑器IDLE
iamlaosong文
下载python进行安装,默认自带此工具,启用:开始-&程序-&Python 2.*/3.*-& IDLE (Python GUI)
如此就打开了Python Shell,可以...
python 安装、编辑器的使用
一,Python安装、升级1、Windows系统 (1,进入Python官网www.python.org,在Downloads下拉菜单中点击Windows。(2,选择你想要的版本下载,在这里可以使用浏...
4 个快速的 Python 编译器 for 2018
windows上python的安装&编辑器的推荐
python的安装简单操作
首先到python官方网站下载python3最新的安装包
官网下载特别慢,百度上搜的话百度软件中心会提供该软件,安全无毒,下载速度很快。
Python编译器的选择与比较(入门必备)
python 入门必备 编译器选择
没有更多推荐了,

我要回帖

更多关于 解释器与编译器 的文章

 

随机推荐