摘要 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。由于翻译方式的不同,习惯上我们大致把高级语言分为两类,即编译型语言和解释型语言。对于这两种类型的编程语言,很多人在理解层面上存在盲点,本文将对这两种类型的编程语言进行探讨,帮助读者更好的理解这一问题。

文章概览

编译型语言和解释型语言

基本解释

优缺点

python

python解释器

python代码执行过程

编译型语言和解释型语言

基本解释

对于编译型语言,我们以C语言为例,C语言在执行过程中,先要将源程序编译为目标文件(机器代码),该目标文件是与平台相关的,也就是说ARM生成的目标文件,不能被用于MIPS的CPU,也不能用于x86的CPU。目标文件经过连接操作就可以生成可执行文件,以后我们想再次运行这段代码时,不必进行编译操作,只需要直接执行生成的可执行文件即可。

对于解释型语言呢,我们不需要执行编译过程,程序在执行时直接由解释器逐句地对程序进行解释,转换为机器可以执行的代码。但是对于有些解释型语言来说,也需要进行编译操作,比如Java。Java程序在执行过程中先要将源代码编译成字节码文件,然后再由解释器对字节码文件逐句进行解释,所以说Java是一种先编译后解释的语言。(注:Java为了实现跨平台的特性,专门在从高级语言代码转换至机器码过程的中间加入了一层中间层JVM(java虚拟机),Java首先依赖编译器将代码(.java)编译成JVM能识别的字节码文件(.class),然后由JVM解释并执行该字节码,也可结合JIT(just-in-time compilation即时编译)技术,将解释生成的机器码转换为更高效的本地机器码,且该机器码可被缓存,来提高重复执行的效率。)

常见的编译型语言包括:C/C++、Pascal等,常见的编译型语言包括:Java、JavaScript、VBScript、Perl、Ruby、MATLAB 等。

优缺点

编译型语言可以做到一次编译,多次运行,执行效率比较高;而解释型语言在每次执行时都需要解释器进行解释,执行效率较低(但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言)。

编译型语言的执行依赖于平台,生成的可执行文件不能运行在其他平台,需重新编译,跨平台的性较差;而解释型语言的执行依赖于解释器,各个平台都有相应的解释器,解释器会将程序解释成基于当前机器指令集的机器码并执行,所以解释型语言可以很好的移植到其他平台,具有很好的跨平台性。

编译型语言,在编译阶段即可发现常见的语法或者链接等错误,此机制可在运行前帮助程序员排查出可能潜在的语法、语义和类型转换错误,编译型语言一般都有明确的变量类型检测,也被称作强类型语言,即编译型语言至少能确保所生成的可执行文件肯定是可运行的,至于执行的逻辑不对则属于程序员业务逻辑错误范畴了。而对于解释型语言,代码中的错误必须直到运行阶段方可发现,由此造成的困惑是:往往一段程序看不出问题但却在运行阶段错误连连且需要一个个排查:变量拼写错误、方法不存在等。但也正是基于解释是在运行期执行转化的特性,一般的解释型语言通常都有自己的shell,可以在不确定某些执行结果时立即“动手执行”试一下,这就比每次都需要编译后才能运行并看到结果省去不少时间。

python

通过上面对编译型语言和解释型语言的分析,我们可以得出结论,python是属于解释型语言的一种。python类似于Java,为了效率上的考虑,也提供了编译方式,编译后生成的也是字节码的文件形式,并由Python的的VM(虚拟机)的去执行。不同点在于,Python的编译并非强制执行的操作,确切来说Python的编译是自动的,通常发生在对某个模块(module)的调用过程中,编译成字节码的可以节省加载模块的时间,以此达到提高效率的目的。可见,某些先进的高级语言在对编译和解释方面的拿捏舍去,都采取了一种:两手抓,两手都要硬的态度。

python解释器

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器

CPython: 这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器,它是使用最广的Python解释器.

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

python代码执行过程

参考这篇博客和这篇博客

python是一种解释型语言_解释型语言python相关推荐

  1. python是一种编译语言_解释型语言和编译型语言的不同以及Python如何运行

    计划写关于Python中如何实现属性管理.函数(或类方法)管理.类管理的几篇成系列的文章. 而这篇文章写在这个系列之前,希望对后面几篇文章的理解有所帮助. 老实说,我也是在网上搜索了一些资料才写的这篇 ...

  2. python闭包两种写法_浅析Python闭包

    一.什么是闭包python 在介绍闭包概念前,咱们先来看一段简短的代码数组 def sum_calc(*args):defwrapper(): sum=0for n inargs: sum+=n;re ...

  3. python是哪种动物_基于Python的动物识别专家系统

    1. 利用pyqt5来设计专家系统的界面. 如下图一: 图一 起始界面 相应的运行过程的界面,如图二: 图二 相应的运行过程界面 2. 设置规则文本 guizhe.txt 有毛发 哺乳动物 有奶 哺乳 ...

  4. python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言

    在摸索适合自己的语言学习方法,看到一篇好文章,转之,侵删. Python的语法范式相当多.知识点相当细,但是Python是一种内在一致性很好的语言,理解了几条基本的规则,就很容易理解大部分语法与现象. ...

  5. 四全集学python选哪种电脑_“Python教程哪个版本最适合学习?“python教程全集

    python教程,求一套比较好的python教程 好不好主要先看你自己,理解能力样,有没有接触过编程,有没础,这很重要: 看教程,能不能先给你建立起知识体系框架,许多教程一上来就直接给你灌输知识很让人 ...

  6. 永恒python配合什么主武器_让Python代码更易维护的七种武器

    检查你的代码的质量,通过这些外部库使其更易维护. 可读性很重要. 随着软件项目进入"维护模式",对可读性和编码标准的要求很容易落空(甚至从一开始就没有建立过那些标准).然而,在代码 ...

  7. 详解python运行三种方式_详解python运行三种方式

    方式一 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: $ p ...

  8. python切片操作的几种格式_【Python杂记】第四篇:序列切片

    使用python处理问题的过程中,经常会遇到从某个序列中抽取部分值的情况."切片"操作正是专门用于实现这一目的的方法. 实际上,可以通过单次或多次切片操作实现任意目标值切取.切片操 ...

  9. python语言程序的特点_《Python语言程序设计》 —1.1.3 Python的特点及应用领域...

    1.1.3 Python的特点及应用领域 学习一门编程语言,应该了解其特点及适用领域.Python语言的特点及应用领域如下. 1. 特点 (1)优点 简单易学:在开发者社群流行着一句玩笑-" ...

最新文章

  1. ICML2020 | Retro*: 通过神经引导的A*搜索学习逆合成设计
  2. webpack 配置文件.conf.js 浅理解
  3. 堆排序 海量数据求前N大的值
  4. 米匡框架实现量化交易炒股
  5. react-router使用教程
  6. xhost和XServer相关概念汇总
  7. empinfo Oracle数据库,Oracle数据库中相关技术详细操作
  8. circle loss代码实现_Python全栈之路-23-使用Python实现Logistic回归算法
  9. URI Is Not Registered
  10. 1109: 方块消除 blocks
  11. matlab—绘制给定数据的概率密度曲线+实现图像局部放大效果
  12. 什么是单点故障与应对措施
  13. dockerfile构建一个(python+flask+html)镜像 + 上传到阿里云私有仓库 + 部署到k8s---全过程
  14. 一个博士毕业之际写的一些发文章的心得
  15. WINDOWS如何使用CMD修复硬盘命令来解决硬盘问题?
  16. “以撒的结合”地图是怎样生成的——RogueLike地图随机生成
  17. 中国学术会议2009---001
  18. csgo怎么绑定一键跳投_CSGO投掷物一键跳投的设置方法
  19. 关于在python中安装turtle出现的一些问题
  20. linux vbox安装mac os,使用virtualbox虚拟机安装macos和linux系统

热门文章

  1. 安卓APP获取ROOT权限
  2. python transpose函数_Numpy之np.transpose矩阵转置
  3. Android Studio 离线打包接收不到个推消息
  4. java mvp设计模式_MVP设计模式
  5. 数学-机器学习-线性分类
  6. Neutron架构分析
  7. 电子行业三大拐点已经确定 有望迎来整体景气度上行
  8. 线段树 点更新段查询
  9. Linux基础 个人VPS安全
  10. android观察者模式被观察者,Android的设计模式-观察者模式